`
edwardpro
  • 浏览: 300585 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

装箱操作需注意

阅读更多

近期在工作里发现一个代码bug,主要是装箱上的问题,我们知道在JDK5以后开始有了装箱所谓的装箱就是把普通类型装载成他的对象形式或者还原。实际上按照我的理解这就是java原来对于String的处理,考虑下面两者的不同点:

//这会在堆里生成一个空间
String a = new String("aaa");
//只生成在栈
String b = "aaa";

 

实际上String一直是一个特殊的对象,联想一下int和Integer也是这样的过程,所以平时零时变量用得多尽量使用下面的这种形式吧,这样可以省内存空间。

 

好了回到装箱上,实际上装箱是很好,但是自动的卸载箱子可能会有问题比如下面的:

Integer a=null;
int b=a;

 

这个代码是有问题的,所以在自动装箱时无所谓,但是卸载的时候(这常出现在改写的老代码里)一定要注意了,确保对象不为空否则解开是有问题的,不过在JAVA7中这个问题已经被修复了,否则则需要我们在此类代码时候判断对使用实际上造成一定的伤害。

分享到:
评论

相关推荐

    解析C#中的装箱与拆箱的详解

    装箱和拆箱是值类型和引用类型之间相互转换是要执行的操作。...要把值类型放在堆上就需要执行一次装箱操作。这行语句的IL代码如下,请注意注释部分说明: 代码如下:.locals init ( [0] object objV

    C#装箱和拆箱操作实例分析

    本文实例讲述了C#装箱和拆箱操作。分享给大家供大家参考,具体如下: 1. C#中的装箱 C#中的装箱就是把一个值类型隐式地转换为object类型,转换过程中采用的是值的拷贝而不是引用,这从下面的例子可以看出: using ...

    丽晶MCS营销管理ERP

    7.9 装箱 59 7.10 出货 59 7.11 月末仓库盘点 61 第八章 零售业务的管理 64 8.1零售价管理 64 8.1.1关于店铺零售价的核对 64 8.1.2零售调价的操作 64 8.2商场扣点调整管理 68 8.3促销管理 68 8.4 零售补货 69 8.5...

    SuperCalculator

    (1)本程序是参考微软操作系统自带的“标准计算器”来设计编写的,注意在使用本计算器前按键盘F1键熟悉“帮助文档”提示的操作 (2)在这次计算器程序的编写中,我采用适当的处理方法以避免装箱拆箱造成的性能上的损失...

    优化版的环形缓存器 线程安全 生产者消费者模式

    之前上传过一个环形缓存器(这是一个基本的生产者消费者模式的环形缓存器,具有线程安全性,可同时写入和读取,非装箱拆箱操作,高性能大数据可使用此缓存器。),这个是优化版,增加了缓存器满的标志位,优化了内存...

    值类型和引用类型的区别

    另外,如果实例会被频繁地用于Hashtable或者ArrayList之类的集合中,这些类会对其中的值类型变量进行装箱操作,这也 会导致额外的内存分配和内存拷贝操作,从应用程序性能方面来看,其实也不划算。 哦对了,上面提到...

    C#中String StringBuilder StringBuffer类的用法

     在我们平时的使用当中很容易不注意到的是,自己写的代码很容易发生了装箱的操作(把值类型转换为引用类型)。就比如很常见的,一个字符串拼接  string str=9+test; 通过查看IL代码可以知道这里发生了装箱的操作。...

    docker-formula:安装和设置Docker

    目前支持: 软件Docker( )[所有操作系统] 容器管理容器。 [所有操作系统] 撰写容器。 [所有操作系统] Docker Swarm集群。 [Linux] 默认的docker.software和docker.compose.software状态支持: 归档Docker-Engine...

    .net中as和is之间的区别分析

    注意,as 运算符只执行引用转换和装箱转换。as 运算符无法执行其他转换,如用户定义的转换,这类转换应使用 cast 表达式来执行 as操作符不会做过的转换操作,当需要转化对象的类型属于转换目标类型或者转换目标类型...

    C#5.0本质论第四版(因文件较大传的是百度网盘地址)

    14.1.3 匿名类型和隐式局部变量的更多注意事项 388 14.2 集合初始化器 390 14.3 是什么使类成为集合:IEnumerable 392 14.3.1 foreach和数组 392 14.3.2 foreach和IEnumerable 393 14.3.3 ...

    docker-github-actions-runner:这将使用docker-in-docker运行新的自托管github动作运行程序

    请注意,尽管此运行程序安装并允许使用docker,但github action本身尚不支持从自托管运行程序使用docker。 想要查询更多的信息: Docker-在ARM上撰写 请注意, docker-compose当前在ARM上不起作用( ),因此此处...

    USB 硬 盘 使 用 说 明

    系统要求: IBM兼容PC机,带USB接口, WINDOWS98/ME/2000操作系统。 MACINTOSH 计算机系统 MAC OS 8.6 或更高版本。...装箱清单 USB硬盘(盒)一只 USB连线一条 驱动软盘一张 说明书一份 固定螺丝2只

    CLR.via.C#.(中文第3版)(自制详细书签)Part1

    8.4.1 操作符和编程语言互操作性 8.5 转换操作符方法 8.6 扩展方法 8.6.1 规则和原则 8.6.2 用扩展方法扩展各种类型 8.6.3 ExtensionAttribute 8.7 分部方法 8.7.1 规则和原则 第9章 参 数 9.1 可选参数和...

    CLR.via.C#.(中文第3版)(自制详细书签)

    27.8 APM的注意事项 27.8.1 在没有线程池的前提下使用APM 27.8.2 总是调用EndXxx方法,而且只调用一次 27.8.3 调用EndXxx方法时总是使用相同的对象 27.8.4 为BeginXxx和EndXxx方法使用ref,out和params实参 ...

    CLR.via.C#.(中文第3版)(自制详细书签)Part3

    8.4.1 操作符和编程语言互操作性 8.5 转换操作符方法 8.6 扩展方法 8.6.1 规则和原则 8.6.2 用扩展方法扩展各种类型 8.6.3 ExtensionAttribute 8.7 分部方法 8.7.1 规则和原则 第9章 参 数 9.1 可选参数和...

    CLR.via.C#.(中文第3版)(自制详细书签)Part2

    8.4.1 操作符和编程语言互操作性 8.5 转换操作符方法 8.6 扩展方法 8.6.1 规则和原则 8.6.2 用扩展方法扩展各种类型 8.6.3 ExtensionAttribute 8.7 分部方法 8.7.1 规则和原则 第9章 参 数 9.1 可选参数和...

    .net基础收集汇总

    2.装箱和拆箱装箱:值类型转换为引用类型拆箱:引用类型转换为值类型.NET中,数据类型划分为值类型和引用(不等同于C++的指针)类型,与此对应,内存分配被分成了两种方式,一为栈,二为堆,注意:是托管堆。...

    在一小时内学会 C#(txt版本)

    本文通过一系列例程以简短但全面的方式讨论了 C# 语言构造和特性,所以你仅需略览代码片刻,即可了解其概念。 注意:本文不是为 C# 宗师而写。有很多初学者的 C# 文章,这只是其中之一。 接下来关于 C# 的讨论主题...

    container_proxy:容器代理服务和客户端

    请注意,此功能尚未完全集成到Shifter中,因此需要一些手动步骤。 这是一个示例用法。 这将在启动容器之前在Slurm作业内部执行以下操作... # Set the Proxy Filename. Make sure this is uniqueue export PROXY_...

Global site tag (gtag.js) - Google Analytics