首页 > 编程语言 > 详细

java的Interger自动包装带来的问题

时间:2020-03-24 23:47:59      阅读:90      评论:0      收藏:0      [点我收藏+]

1 首先看一下以下代码:

                Integer b=7;
		Integer c=7;
		Integer r=234;
		Integer d=234;
		System.out.println(b==c);
		System.out.println(b.equals(c));
		System.out.println(r==d);
		System.out.println(r.equals(d));

  

一眼看下去运行结果就是二个==是false,二个equals是true,根据==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。运行结果如下:

true
true
false
true

由于自动包装用Interger类的ValueOf方法实现的,现在去看一下源码ValueOf方法如下:

技术分享图片

 

 技术分享图片

 

 从上面代码可以看出:当数的范围为-128到127时,二个数==是true,否则是false,Integer里面有一个内部类IntegerCache,是用来做缓存优化性能的。默认缓存了-128到127中间的数字,据说这些使的比较频繁。其实java里面好多的类都有这样的优化。如果在-128-127之间的就直接拿缓存的,不在的就new一个Intege。也就是说自动包装会主动创建一个字节的空间作为缓冲空间来存储-128到127的数。包装类尽量用equals来比较。

java的Interger自动包装带来的问题

原文:https://www.cnblogs.com/shareAndStudy/p/12563151.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!