package java的相等问题;
/*为什么
128==128返回false,而127==127返回true
*/
public class Demo {
public static void main(String[] args) {
Integer a = 128;
Integer b = 128;
System.out.println(a == b);
Integer c = 127;
Integer d = 127;
System.out.println(c == d);
}
/*
我们知道,如果两个引用指向同一个对象,那么==就成立;反之如果两个引用指向的不是同一个对象,那么
==就不成立,即便两个引用内容是一样的。因此它的结果就会是FALSE
这是个非常有趣的地方。如果你查看Integer.java类你会发现IntegerCache.java这个内部私有类,它为-128到127
之间的所有整数对象提供缓存
这个东西为那些比较小的整数提供内部缓存,
当进行如此声明时
*/
Integer c = 127;
/*
对应的它的内部就是这样的
Integer var=Integer.valueOf(127);
整数类型在-128到127之间,会使用缓存,造成的效果是如果已经创建了一个相同的整数,使用ValueOf创建第二次时
,不会使用new关键字,而是使用已经缓存好的对象,所以使用valueOf方法创建两次对象,若对应的数值相同,且数值
在-128到127之间时,两个对象都指向同一个地址。因此就会出现我们题目的结果了?
这里可能你会问为什么-128到127之间所有整数设置缓存?
原因很简单因为这个范围的数在生活中频繁使用,多次使用相同底层对象这一特性可以通过该设置进行有效的内存优化
*/
}
128==128返回false,127==127返回true ??
最新推荐文章于 2024-05-29 18:21:01 发布