java 中的equals

来源:百度知道 编辑:UC知道 时间:2024/06/28 16:12:44
class Value {
int i;
}

public class EqualsMethod2 {
public static void main(String[] args) {
Value v1 = new Value();
Value v2 = new Value();
v1.i = v2.i = 100;
System.out.println(v1.equals(v2));
Integer n1 = new Integer(47);
Integer n2 = new Integer(47);
System.out.println(n1.equals(n2));

}
}

输出结果是
false
ture
为什么?

楼主对这个问题感到困惑,主要是因为~楼主不知整型类和字符串一样在内存中有个常量池!
System.out.println(v1.equals(v2)); 这句的结果是false是由于V1和V2都是用new在内存中分别开辟了一个地址;所以结果是false

System.out.println(n1.equals(n2));这句的结果是true是由于n1和n2都指向了常量池中的47这个地址,所以结果是true。
我想楼主因你更改明白了
大过年的楼主也不给点分,这不是楼主的风格啊!!

因为Value类是你自己写的,equals无法对其进行判断(因为他不知道你这个类中的具体内容),如果你还要实现equals的功能就要自己对其进行重写.

因为equals方法是表示类型相同,值相等,并不能表示就正确

false吧?

System.out.println(v1.equals(v2));
这里你比较的 V1和V2的两个对象,不是比较他们的内容。
V1和V2都NEW了2个不同的引用空间,怎么会相等呢。
Integer n1 = new Integer(47);
Integer n2 = new Integer(47);
这个不用说了吧