int和Integer的区别
来源:互联网 发布:php动态网站设计案例 编辑:程序博客网 时间:2024/05/14 09:00
作者:鹿丸不会多项式 出处:http://www.cnblogs.com/hechao123 转载请先与我联系。
今天有个学弟问了我一个面试题:
Integer a = 128;Integer b = 128;System.out.println(a == b);
输出什么?为什么?说来惭愧,我的直觉告诉我会输出flase,但突然间还想不出来为什么。。所以写了个例子研究了下:
public static void main(String[] args) { int i1 = 128; int i2 = 128; Integer i3 = 128; Integer i4 = 128; Integer i5 = new Integer(128); Integer i6 = new Integer(128); System.out.println(i1 == i2); System.out.println(i1 == i3); System.out.println(i3 == i4); System.out.println(i3 == i5); System.out.println(i5 == i6);}
结果输出:
truetruefalsefalsefalse
这里前两个和后两个都很好理解,就不说了,第三个也就是开头提出的那个问题,输出flase说明i3和i4是两个不同的对象。然后debug看了一下:
为什么一样的值也没有使用new但是对象却有两个呢,在网上查了下找到了答案:
Integer i3 = 128; 实际上执行了 Integer i3 = Integer.valueOf(128);
public static Integer valueOf(int i) { assert IntegerCache.high >= 127; if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i);}
也就是说,对于-128到127之间的数,Integer会进行缓存,比如:Integer x = 127时,会将127进行缓存,下次Integer y = 127时,就会直接从缓存中取,就不会new了,所以x和y是同一个对象。
但是Integer z = 128时,会直接返回new Integer(128),下次Integer w = 128时也直接返回new Integer(128),所以z和w不是同一个对象。
最后,总结一下这类题目:
1.无论何时,Integer与new Integer不会相同,不会经历拆箱过程,如例子中的i3的引用指向专门存放它的内存(常量池),而i4的引用指向堆,他们的内存地址不一样
2.无论何时,两个都是new出来的,都不是同一个对象
3.两个都是非new出来的Integer,如果数在-128到127之间,则是true,否则为false,上面例子解释过了
4.int 和 integer(无论是不是new出来的)比,会把Integer自动拆箱为int再去比,这个时候比较的是数值,数值一样都为true
- int 和 Integer 的区别
- int 和 Integer 的区别
- int和Integer的区别
- int和Integer的区别
- int 和 integer的区别
- Integer和int的区别
- Integer 和 int 的区别
- int和integer的区别
- int和Integer的区别
- int 和integer的区别
- int 和 Integer的区别
- int 和integer的区别
- int 和integer的区别
- Integer和Int的区别
- int 和integer的区别
- int 和integer的区别
- Int 和integer的区别
- int 和Integer的区别
- css截取超出的文本+label标签的‘for’属性
- Eclipse工具篇
- %preun(vsftpd-2.0.1-2mdk.x86_64) scriptlet failed, exit status 127 解决方案
- shell变量的显示与设置
- UAC提权示例
- int和Integer的区别
- Mac OS系统四种修改Hosts文件的方法
- Android获取发布版和调试版的SHA1值
- Linux Kernel
- cocoa pods 添加ReactiveCocoa报错swift版本处理办法
- HTML中关于图片与图片之间的缝隙问题
- CRF条件随机场简介
- Java:单例模式的七种写法
- 不建议mysql分区表