public class Application {
public static void main(String[] args) {
Integer a = new Integer(10);
Integer b = new Integer(10);
int x = new Integer(10);
int y = new Integer(10);
int p = 10;
int q = 10;
System.out.println(a == b);
System.out.println(a == x);
System.out.println(x == p);
System.out.println(b == q);
System.out.println(y == q);
System.out.println(x == y);
}
}
以上代码生成输出:
false
true
true
true
true
true
答案 0 :(得分:1)
将原语int
与其包装类Integer
进行比较时,包装器的原始值为unboxed
。这就是为什么除了第一个条件之外你总能得到真实。
在第一个条件中,您正在检查两个不同对象的引用相等性,这显然是假的。
答案 1 :(得分:1)
==
用于比较引用。当您使用相同的值创建2个对象时,应使用.equals()
,因为使用new
实例化的2个对象将具有不同的引用。使用int
时,它会对这些值进行比较,因为它们是基元,并且将new Integer()
传入int
正在创建基元int
。
答案 2 :(得分:1)
Integer a = new Integer(10);
Integer b = new Integer(10);
a==b
---> 将引用变量a
与引用变量b
进行比较。不是它们指向的对象。而这两个参考变量确实是不同的。因此,错误。使用.equals()
比较对象。
a==x
--->的自动拆箱即可。 x包含值10.在比较期间,将Integer与int进行比较。将包装器与premitive进行比较时,会发生自动拆箱。 a成为一个int。因此,有效地将10与10进行比较。因此确实如此。
x==p,b==q,y==q,x==y
- >的相同。自动拆箱,生效。因此都是真的。
每当Java将包装类变量与基本变量进行比较时,它会将包装类变量解包为基元,然后对它们进行比较。
使用Java 5之前的SDK编译它,我怀疑它是否会编译。 Java从Java 5引入了这个功能。如果我能记得正确的话......