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

How the comparisons are taking place in the code below

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. 如何 int x = new Integer(10);正在接受内部评估?

当您将原始值 int 与其包装器 class Integer 进行比较时,包装器与其原始值相比是 unboxed。这就是为什么除了第一个条件之外你总是得到真实的原因。

在第一个条件中,您正在检查两个不同对象的引用相等性,这显然是错误的。

== for 类 比较引用。当您创建具有相同值的 2 个对象时,您应该使用 .equals(),因为使用 new 实例化的 2 个对象将具有不同的引用。使用 int 时,它会比较值,因为它们是原始值,将 new Integer() 传入 int 会创建原始值 int.

Integer a = new Integer(10);
Integer b = new Integer(10);

a==b ---> 引用变量a是比较引用变量b.而不是它们指向的对象。这两个参考变量确实不同。因此,假的。使用 .equals() 比较对象。

a==x ---> 自动拆箱。 x 包含值 10。在比较期间,Integer 与 int 进行比较。当 wrapper 与 premitive 进行比较时,会发生自动拆箱。 a 变成一个整数。因此,有效地将 10 与 10 进行比较。因此为真。

x==p,b==q,y==q,x==y --> 同理。自动拆箱,生效。 所以都是真的。

每当 Java 将包装器 class 变量与原始变量进行比较时,它会将包装器 class 变量拆箱为原始变量,然后进行比较。

用 Java 5 之前的 SDK 编译它,我怀疑它是否会编译。 Java 从 Java 5. 如果我没记错的话..

介绍了这个功能