将Integer与原语进行比较

arj*_*soh 2 java integer equals long-integer

我没有java编译器,我想检查如何处理对象与基元java的比较Integer.有人可以确认以下比较的结果是正确的:

Integer a = 500;
long b = 500;
a == b  //-> false
a.equals(b)  //-> true
Run Code Online (Sandbox Code Playgroud)

通常情况下,在java的第一种比较中Boxing,在第二种Unboxing比较中,比较原始值吗?

Evg*_*eev 7

看我的结果

    Integer a = 500;
    long b = 500;
    System.out.println(a == b);
    System.out.println(a.equals(b));
Run Code Online (Sandbox Code Playgroud)

产量

true
false
Run Code Online (Sandbox Code Playgroud)

这是因为第一次比较使用拆箱

b == a.intValue()
Run Code Online (Sandbox Code Playgroud)

产生真实,因为在Java 500L == 500是真的.

第二次比较使用拳击

a.equals(Long.valueOf(b))
Run Code Online (Sandbox Code Playgroud)

这会产生错误,因为a和b是不同类的实例.请参阅Integer.equals impl:

public boolean equals(Object obj) {
    if (obj instanceof Integer) {
        return value == ((Integer)obj).intValue();
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)