我是靠谱客的博主 美好悟空,最近开发中收集的这篇文章主要介绍java Integer对象的比较,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

以下代码会输出什么?

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对象的比较所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部