【问题标题】:Different behavior of int and Integer [duplicate]int 和 Integer 的不同行为[重复]
【发布时间】:2016-01-30 09:56:17
【问题描述】:

我注意到下面的代码返回false

Integer a = 600;
Integer b = 600; 
System.err.println(a == b);

但是这个

int a = 600;
int b = 600; 
System.err.println(a == b);

返回true

谁能解释一下?

【问题讨论】:

    标签: java


    【解决方案1】:

    要知道的最重要的事情是直到128 的值被缓存,并且JVM 为您提供相同的对象,因为引用比较有效。在128 之上,它创建了一个新实例。

    欲了解更多信息,请访问javadoc of Integer.valueOf(int)(这是幕后发生的事情)

    【讨论】:

    • 那么Integer a = 20; Integer b = 20; System.err.println(a == b); 输出:true 为什么?
    【解决方案2】:

    这个行为是正确的,在java中==比较对象引用,它检查两个操作数是否指向同一个对象(不是等价对象,同一个对象)。

    所以你的第一个例子:

     Integer a = 600;
     Integer b = 600;
     System.err.println(a == b);
    

    你要求java告诉你是否有相同的引用,这是错误的

    在示例 2 中:

    a 和 b 是原语,您要求 java 告诉您它们是否具有相同的值,即 True

    Jeff 已经回答了this

    【讨论】:

    • Integer a = 100; Integer b = 100; System.err.println(a == b);这个返回true
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-30
    • 2014-07-19
    • 2015-01-29
    • 2020-11-08
    • 2014-05-30
    • 2014-04-30
    • 1970-01-01
    相关资源
    最近更新 更多