如何在下面的代码中进行比较

时间:2015-07-22 20:36:30

标签: java integer boxing unboxing

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
  1. 请使用==?
  2. 解释基本类型与参考类型进行比较的过程
  3. how int x = new Integer(10);内部评估?

3 个答案:

答案 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引入了这个功能。如果我能记得正确的话......