值比较与对象参考比较

时间:2014-04-03 11:07:36

标签: java

请有人解释一下,为什么答案是真的&假

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);

        }
    }

7 个答案:

答案 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是假的。