2 qq 33833831 qq_33833831 于 2016.02.04 10:24 提问

这段java代码的问题所在
 public class TestDemo {
    public static void main(String[] args) {
        Integer a=100;
        Integer b=100;

            Integer c=200;
            Integer d=200;

    System.out.println(a==b); //1
            System.out.println(a==100); //2

    System.out.println(c==d); //3
    System.out.println(c==200); //4
    }
}

打印结果为
true
true
false
true

求解 第三个为何为false

2个回答

fanst_
fanst_   2016.02.04 10:37
已采纳

jdk内部对int数值有一部分是缓存起来的,使用缓存值的同样数字Integer都为true,而200超出了缓存的范围,同样两个Integer的200是不同的。
这里解释的很清楚:
http://blog.csdn.net/zhoumingp/article/details/8298566

91program
91program 学习了,还有这样的机制。
接近 2 年之前 回复
luochoudan
luochoudan   Ds   Rxr 2016.02.04 11:40

沙发正解,另外补充一下,Long型里面也有此机制,cache范围也是-128到127。但Float的valueOf方法就直接返回的新对象,没有此问题。比较对象最好还是用equal的啦。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!