我没有java
编译器,我想检查java
对象与Integer
对比与原语的比较。有人可以确认以下比较的结果是正确的:
Integer a = 500;
long b = 500;
a == b //-> false
a.equals(b) //-> true
通常情况下,在第一种比较中,java会Boxing
吗,而在第二种Unboxing
中会比较原始值吗?
答案 0 :(得分:7)
查看我的结果
Integer a = 500;
long b = 500;
System.out.println(a == b);
System.out.println(a.equals(b));
输出
true
false
这是因为第一次比较使用了取消装箱
b == a.intValue()
产生true,因为在Java 500L中== 500是真的。
第二次比较使用拳击
a.equals(Long.valueOf(b))
这会产生错误,因为a和b是不同类的实例。请参阅Integer.equals impl:
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}