请有人解释一下,为什么答案是真的&假
public class IntegerTest {
public static void main(String[] args) {
Integer x = 1000;
long y = 1000;
Integer z = 1000;
System.out.println(x == y);
System.out.println(x == z);
}
}
答案 0 :(得分:7)
x == y
是值比较(因为y
是基本类型),所以1000 == 1000 - > true
。
x == z
是对象引用比较 - 对象x
不是对象z
。它们具有相同的值,但它们仍然是两个完全不同的对象。因此,如果你比较它们,你会得到false
。
拳击&在JLS section 5.1.7中取消装箱转化。
答案 1 :(得分:1)
这与Java具有原始类型(如int)和引用类型(如Integer)这一事实有关。
当将引用类型与基本类型进行比较时,将引用类型实际值与基元类型的值进行比较。 但是,当比较两个引用类型时,将比较引用本身,而不是值。
答案 2 :(得分:0)
System.out.println(x == y);//this will compare referance
System.out.println(x == z);//this will compare value
依据是不同的,值是相同的所以它给出了这样的操作
您可能需要阅读Auto boxing and Unboxing
答案 3 :(得分:0)
第一个是真的,因为它的值完全相同。那清楚吧? 第二个是false,因为long是浮点值,即1000.0。 因此,如果您将浮点数值与整数进行比较,则需要添加类型转换或使用compareTo()
希望有所帮助
答案 4 :(得分:0)
检查两个操作数的值是否相等,如果是,则条件变为真。 平等测试运算符==,!=
==运算符测试两个值是否相同,因此如果x包含值6,则(x == 6)为真。不等运算符!=相反,如果值为0则求值为true是不同的。通常,您使用==和!=使用诸如int和boolean之类的基元,而不是使用String和Color之类的对象。对于对象,最常见的是使用equals()方法来测试两个对象是否表示相同的值。
==和.equals()的相似性可能令人困惑,因此这里有一个建议的规则:Java中的每个值都是基元(例如int)或对象(例如String)。使用==,<,> =等等。使用像int这样的原语。将.equals()与String和Color等对象一起使用。由于解引用点(。)仅适用于对象,因此您可以这样记住:如果它可以采用点,则使用.equals()(例如String),否则使用==(例如int)。
也可以将==与对象一起使用。在这种情况下,==做的是测试两个指针是否指向完全相同的对象。例如在Java代码中使用==有点罕见,因此专注于将equals()与对象一起使用更简单,而且==仅使用原语。
答案 5 :(得分:0)
当你要求Java比较x == y时,你要求它将Integer(class)与1000(long,这是一种原始类型)进行比较。 在这种情况下,Java将自动取消装箱x并尝试比较值。
但是,当您尝试比较两个类(甚至两个整数)时,Java将比较地址,这将是错误的。
答案 6 :(得分:0)
Integer是一个包装类型,一个与基本类型int相关联的Object类型,因此,尽管它是一个对象类型,但它可以表现为基本类型。
当使用==
与基本类型进行比较时,Integer对象表现为基本类型,并且比较变量x和y的值,返回true。
当与另一个对象进行比较时,使用==
我们要求的是两个对象是相同的,这是相同的。如果整数对象的值相同,则它们是等于的,并且可以使用.equals()
来检查它。所以x.equals(z)
是真的。但是x和z不相同,如果我们改变z的值,x的值保持不变,它们是不同的对象,所以x==z
是假的。