java中==的用法请教

来源:百度知道 编辑:UC知道 时间:2024/05/28 05:21:05
int k=2;
Integer i=new Integer(k);
Integer j=new Integer(k);
System.out.println(i==j);
System.out.println(i==k);
System.out.println(k==j);

结果是
false
true
true

为什么?
用==比较基本类型和引用类型时的规则是什么?
(“==”一边是引用类型一边是基本类型)

要从C的角度去看。

int k=2;
Integer i=new Integer(k);
Integer j=new Integer(k);

k是从栈中分配的内存,就是C中的普通变量。
i和j都是从堆中分配的内存,也就是C中的指针。

i==j是两个指针比较,那么就会比较它们的地址,所以不相等。
i==k是变量和指针比较,这个时候java提取i的值,然后和k去比较,i的值就是从k复制过去的,所以相等。
k==j一样。

需要注意的是i==j 因为它们的类型相同都是指针,所以它们的比较就需要equals了。 如 i.equals(j);

字符串不能直接 == 比较的原因也是这个,所有的java字符串全是指针,所以字符串之间的比较全部都是指针之间在比较地址。

不知道你明白了么?