概述
以下代码会输出什么?
Integer a100 = 100;
Integer b100 = 100;
Integer a1000 = 1000;
Integer b1000 = 1000;
Integer aNew100 = 100;
Integer bNew100 = 100;
System.out.println(a100 == b100);
System.out.println(a1000 == b1000);
System.out.println(aNew100 == bNew100);
测试发现,System.out.println(a100 == b100);
输出true,System.out.println(a1000 == b1000);
输出false。System.out.println(aNew100 == bNew100);
输出false。why?
形如Integer a100 = 100;
的语句会触发Integer的自动装箱,自动装箱调用了Integer的valueOf()
方法。valueOf()
的源码如下
// IntegerCache.low = -128
// IntegerCache.low = -127
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
通过valueOf()
得到的Integer对象,如果取值范围在-128到127之间,就会返回 IntegerCache 缓存的Integer对象,超过这个范围,就new一个对象返回。每new一个对象,都会在堆中为这个对象分配地址。
因此a100和b100是同一个对象的引用,a1000和b1000不是, aNew100和bNew100也不是。java中==
运算符在对象间使用时,比较的正是对象的内存地址是否相同。所以出现上面的结果。
对象间的比较,还是用equals吧。
完结撒花✿✿ヽ(°▽°)ノ✿
最后
以上就是美好悟空为你收集整理的java Integer对象的比较的全部内容,希望文章能够帮你解决java Integer对象的比较所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复