比较原语和参考文献

时间:2016-09-15 11:37:38

标签: java

我对原始数据类型和引用数据类型中的一些概念感到困惑......我知道不同之处,但是当我尝试使用此代码时,输​​出是意外的!

class Learn{

public static void main(String[] args) {

    int a = 5;
    int b = 6;
    int c = 5;

    System.out.println(a);
    System.out.println(b);
    System.out.println(c);

    if (a == c)
        System.out.println("PE");

    if (b != c)
        System.out.println("PNE");

    System.out.println("========");

    Integer x = new Integer(5);
    Integer y = new Integer(6);
    Integer z = new Integer(5);

    System.out.println(x);
    System.out.println(y);
    System.out.println(z);

    if (x == z)
        System.out.println("RE");

    if (y != z)
        System.out.println("RNE");
}
}

那就是输出

  

5

     

6

     

5

     

PE

     

PNE

     

========

     

5

     

6

     

5

     

RNE

那么为什么RE没有像RNE那样写入STDOUT?

3 个答案:

答案 0 :(得分:2)

Integer x = new Integer(5);
Integer y = new Integer(6);
Integer z = new Integer(5);

xz引用不同的Integer对象(因为您使用new关键字的每种类型,您都在创建一个唯一的对象)。因此x==z是错误的。 x.equals(z)将返回true,因为两个对象都包含相同的数值。

答案 1 :(得分:0)

因为在比较x和z时,实际上是在比较对象,而不是它们包含的值。

答案 2 :(得分:0)

xz引用不同的Integer个对象。比较x == y时,您正在比较对象引用。

另一方面,abc是值类型,因此当您比较a == c时,将比较它们的值。