3 回答
TA贡献1765条经验 获得超5个赞
Integer x = ...;Integer y = ...;System.out.println(x == y);
x
y
Integer x = new Integer(10);Integer y = new Integer(10);System.out.println(x == y);
false
Integer x = 10;Integer y = 10;System.out.println(x == y);
true
if (x.intValue() == y.intValue())
if (x.equals(y))
Integer.equals(Integer)
Integer
compareTo
if (x.compareTo(y) < 0)
Integer
, Long
int
, long
==
!=
(
如果相等运算符的操作数都是数值类型,或者一个是数值类型,另一个可转换为数字类型(§5.1.8),则对操作数执行二进制数值提升(§5.6.2)。
<
, <=
, >
>=
(
数值比较运算符的每个操作数的类型必须是可转换(§5.1.8)为原始数值类型的类型,否则会发生编译时错误。二进制数字提升在操作数上执行(第5.6.2节)。如果操作数的提升类型为int或long,则执行有符号整数比较;如果此提升类型为Float或Double,则执行浮点比较。
TA贡献1805条经验 获得超9个赞
==仍将测试对象相等性。然而,很容易被愚弄:
Integer a = 10;
Integer b = 10;
System.out.println(a == b); //prints true
Integer c = new Integer(10);
Integer d = new Integer(10);
System.out.println(c == d); //prints false
包含不平等的示例将起作用,因为它们不是在对象上定义的。但是,随着==比较时,仍将检查对象相等。在这种情况下,当您从装箱原语初始化对象时,将使用相同的对象(同时用于a和b)。这是一个好的优化,因为原语框类是不可变的。
添加回答
举报