人们可以解释为什么这段代码会给出结果
public class InputTest {
public static void main(String[] args) {
Integer w = new Integer(1);
Integer x = 1;
Integer y = x;
double z = x;
System.out.println(w.equals(y));
System.out.println(w == y);
System.out.println(x == y);
System.out.println(z == w);
}}
答案 0 :(得分:1)
w.equals(y)
返回true
,因为Integer.equals
会比较Integer
个对象所包含的值。
w == y
产生false
,因为您比较了引用,而不是Integer
对象包含的值。由于您明确创建了新的Integer
对象w
(Integer w = new Integer(1)
)w
和y
不是同一个对象。
x == y
生成true
,因为您将x
分配给y
(y = x
)。 x
和y
引用相同的Integer
对象。
z == w
产生true
,因为比较中涉及的一种类型是原语; w
已取消装箱并转换为double
(产生1d
)。这项任务也是如此:double z = x;
。比较这些原语会产生true
。