下面的代码中是如何进行比较的
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
- 请解释使用 == 将基本类型与引用类型进行比较的过程?
- 如何 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. 如果我没记错的话..
介绍了这个功能
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
- 请解释使用 == 将基本类型与引用类型进行比较的过程?
- 如何 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. 如果我没记错的话..
介绍了这个功能