【发布时间】:2018-02-10 20:01:42
【问题描述】:
当数值比较运算符用于比较 Java 中的 2 个整数对象时,我试图了解以下代码的行为。
Integer i1 = new Integer(1);
Integer i2 = new Integer(1);
System.out.println(i1 == i2);
System.out.println(i1 > i2);
System.out.println(i1 >= i2);
以上代码的输出是:
false
false
true
我了解第一种情况下发生的情况(对象实例的比较是这样的,这就是它给出错误的原因)。但是为什么第二种和第三种情况不同,它是如何工作的呢?
【问题讨论】:
-
我对你的结果感到困惑。我认为 JLS 需要在 -128 到 127 范围内的
Integers进行缓存并且是同一个对象。 stackoverflow.com/questions/20897020/… -
@markspace 仅在自动装箱或调用
valueOf()时。使用new关键字创建的对象必须始终是不同的。 -
@shmosel 啊,对!我链接到的 SO 问题说“盒装”对象。感谢您指出这一点。
-
@shmosel - 我不明白stackoverflow.com/questions/1514910/… 是如何回答这个问题的。此链接不讨论使用运算符比较对象。
-
确实如此,简单地说。 数字比较运算符的每个操作数的类型必须是可转换(第 5.1.8 节)为原始数字类型的类型 - 这意味着操作数被视为数字,而不是对象。
标签: java integer comparison autoboxing