我对原始数据类型和引用数据类型中的一些概念感到困惑......我知道不同之处,但是当我尝试使用此代码时,输出是意外的!
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?
答案 0 :(得分:2)
Integer x = new Integer(5);
Integer y = new Integer(6);
Integer z = new Integer(5);
x
和z
引用不同的Integer
对象(因为您使用new
关键字的每种类型,您都在创建一个唯一的对象)。因此x==z
是错误的。 x.equals(z)
将返回true,因为两个对象都包含相同的数值。
答案 1 :(得分:0)
因为在比较x和z时,实际上是在比较对象,而不是它们包含的值。
答案 2 :(得分:0)
x
和z
引用不同的Integer
个对象。比较x == y
时,您正在比较对象引用。
另一方面,a
,b
,c
是值类型,因此当您比较a == c
时,将比较它们的值。