Java基础__Integer类型中的自动装箱

摘要:
Integer类型的自动装箱:就是Java自动将原始类型值转换成对应的对象,比如将int的变量转换成Integer对象,这个过程叫做装箱,反之将Integer对象转换成int类型值,这个过程叫做拆箱。

Integer类型的自动装箱:就是Java自动将原始类型值转换成对应的对象,比如将int的变量转换成Integer对象,这个过程叫做装箱,反之将Integer对象转换成int类型值,这个过程叫做拆箱。因为这里的装箱和拆箱是自动进行的非人为转换,所以就称作为自动装箱和拆箱。

Java基础__Integer类型中的自动装箱第1张

packageText;

public classGary {
       public static voidmain(String[] args) {
            //true
            Integer a1 = 127, b1 = 127;
            System.out.println(a1==b1);
            //false
            Integer a2 = new Integer(127);  
            Integer b2 = new Integer(127);  
            System.out.println(a2 ==b2);   
            //false
            Integer a3=128, b3 = 128;
            System.out.println(a3==b3);
            //true
            Integer a4=128, b4 = 128;
            System.out.println(a4.equals(b4));
        }
}
Gary.java

注意点:"=="可以用于原始值进行比较,也可以用于对象进行比较,当用于对象与对象之间比较时,比较的不是对象代表的值,而是检查两个对象是否是同一对象,这个比较过程中没有自动装箱发生。进行对象值比较不应该使用”==“,而应该使用对象对应的equals方法

原因分析:

第一个使用"=="判断 Integer a1 = 127 和Integer b1 = 127

相等原因:Integer的取值范围是-128~127

第二个使用"=="判断Integer a2 = new Integer(127) 和 Integer b2 = new Integer(127)

不相等原因:装箱时,java为了提高效率,IntegerCache类中有一个数组将-128<=i<=127范围之内的数据打包成缓存里的Integer对象了,因此不用new,这个区间里的值用直接=赋值方法得到的变量地址就是同一个,而超出这个范围的数值就会new一个Integer对象出来

第三个使用"=="判断Integer a3=128 和Integer b3 = 128

不相等原因:因为Integer类型赋值范围在-128---127之间,超出这个范围的数值就会重新new一个Integer对象出来,直接用==去比较是比较a3和b3的地址,a3和b3的地址是不相等的

第四个使用使用"=="equals()方法判断Integer a4=128 和Integerb4 = 128

相等原因:使用equals()方法比较的是a4和b4的数值

Java自动装箱的优点:对-128到127的Integer对象进行缓存,当创建新的Integer对象时,如果符合这个这个范围,并且已有存在的相同值的对象,则返回这个对象(地址),不需要再创建一个新的Integer对象,否则创建新的Integer对象

Java自动装箱的缺点:因为自动装箱会隐式地创建对象,像前面提到的那样,如果在一个循环体中,会创建无用的中间对象,这样会增加GC压力,拉低程序的性能。所以在写循环时一定要注意代码,避免引入不必要的自动装箱操作

免责声明:文章转载自《Java基础__Integer类型中的自动装箱》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇SqlServer获取字符串中数字,中文及字符部分数据javascript zip.js 压缩文件操作下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

解决安卓手机连接wifi总弹出“已登录到Wlan网络”

一些Android机型在连接到wifi时会不断提示,“如果你不小心打开了这个提示,你会跳转到一些广告网站。这是因为谷歌服务器会在本地Android系统通电后发送连接请求。”。一些手机制造商的工程师将此连接服务器设置到一些广告网站并登录网络“我们可以管理设备或手机模拟器的状态,还可以执行许多手机操作,如安装软件、升级系统、运行shell命令等。adb是连接安卓...

cocosCreator中Protobuf的简单使用

CocosCreatorwebStorm或VSCode安装node.js下载protobufjs6.8.6步骤:...

自定义样式滚动条

自定义IE浏览器滚动条样式追溯浏览器对滚动条的自定义,恐怕最早的就是IE浏览器了。感觉IE浏览器滚动条自定制功能并不是很强,只能控制一样显示各个部分的颜色而已,像宽度,结构等都无法控制,要靠出个性点的滚动条,很难!自定义FireFox浏览器滚动条在网上找了很多关于Firfox自定义浏览器滚动条的方法,发现firefox中却实是不支持的。...

一款支持显卡GPU的视频格式转换工具转码软件,速度快提升400%

只要软件有图形卡,转换速度非常快,但也有一个缺点。转换后的视频文件大于格式工厂。软件还可以自行设置各种转换参数。当然,你需要更加熟练。我们没有更多的麻烦了。如何确保最小音量的最佳质量,将留给您来解决问题。...

删除隐藏网卡(本机IP地址被占用)4个方法

关闭注册表,重新启动windowsxp或重新登录,在设备管理器中单击查看->显示隐藏设备,展开“网络适配器”卸载原来的老网卡,在重设IP就不会显示IP地址被占用了。方法2:要删除系统中隐藏的网卡,我们必须运行regedit打开注册表编辑器,找到HKEY_LOCAL_MCHINE\SYSTEM\CurrentControlSetControl\Network\...

rabbitmq 命令行与控制台

命令行和控制台rabbitmqctlstop_应用程序关闭应用程序rabbitsqctlstart_应用程序打开应用程序rabbitmqctlstatus节点状态rabbitcqctlad_用户用户名密码:添加用户rabbittqctllist_Users列出所有用户rabbit...