对于Java的处理方式==以及equals()涉及到的数字和其他类型的数字int,我有些困惑Integer。例如:
==
equals()
int
Integer
Integer X = 9000; int x = 9000; Short Y = 9000; short y = 9000; List<Boolean> results = new ArrayList<Boolean>(); // results.add(X == Y); DOES NOT COMPILE 1) results.add(Y == 9000); // 2) results.add(X == y); // 3) results.add(X.equals(x)); // 4) results.add(X.equals(Y)); // 5) results.add(X.equals(y)); // 6) System.out.println(results);
输出(也许您应该先猜测一下):
[true, true, true, false, false]
X == Y
Y == 9
true
Short
x
equal()
X == y
X.equals(y)
false
如果有人能帮助我理解这一点,我将不胜感激。由于什么原因,==和equals()会以这种方式运行?
编辑: 我已将9更改为9000,以表明此行为与-128到127的整数的行为无关。
2 次编辑: OK,如果你认为你明白这东西,你应该考虑以下内容,只是为了确保:
Integer X = 9000; Integer Z = 9000; short y = 9000; List<Boolean> results = new ArrayList<Boolean>(); results.add(X == Z); // 1) results.add(X == y); // 2) results.add(X.equals(Z)); // 3) results.add(X.equals(y)); // 4) System.out.println(results);
输出:
[false, true, true, false]
据我所知,其原因是:
X
y
的原因
正确与二进制数值提升有关。当至少一个等于运算符的操作数可转换为数值类型时,将使用数值等于运算符。首先,第一个操作数被取消装箱。然后,两个操作数都转换为int。
而
是正常的函数调用。如前所述,y将自动装箱到一个Short对象。Integer.equals如果参数不是Integer实例,则始终返回false 。通过检查实现可以很容易地看出这一点。
Integer.equals
有人可能会说这是设计缺陷。