不好意思 第三个应该是: 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)); } } 结果是 false
但是luckyfan 第二个应该是true呀 您可以编译一下
我第一天看书,刚看到这,我的理解如下//: c03:EqualsMethod2.java // From 'Thinking in Java, 2nd ed.' by Bruce Eckel // www.BruceEckel.com. See copyright notice in CopyRight.txt.class Value { int i; /* public boolean equals(Value v){ return (v.i==this.i); } */ }public class EqualsMethod2 { public static void main(String[] args) { Integer n1 = new Integer(47); Integer n2 = new Integer(47); System.out.println(n1.equals(n2)); //调用Integer得equals比较内容
Value v1 = new Value(); Value v2 = new Value(); v1.i = v2.i = 100; System.out.println(v1.equals(v2)); //调用Value的equals比较内容,如果没有,则调用缺省的比较地址 v1 = v2; System.out.println(v1.equals(v2)); //同上说明 } } //
因为value并没有重载equals,所以调用缺省的equals比较地址,当然是false如果写一个equals,如下 class Value { int i; public boolean equals(Value v){ return (v.i==this.i); //比较内容 } } 结果就是true
第二种和第三种应该是false
第三个应该是:
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));
}
} 结果是
false
第二个应该是true呀
您可以编译一下
// From 'Thinking in Java, 2nd ed.' by Bruce Eckel
// www.BruceEckel.com. See copyright notice in CopyRight.txt.class Value {
int i;
/*
public boolean equals(Value v){
return (v.i==this.i);
}
*/
}public class EqualsMethod2 {
public static void main(String[] args) {
Integer n1 = new Integer(47);
Integer n2 = new Integer(47);
System.out.println(n1.equals(n2)); //调用Integer得equals比较内容
Value v1 = new Value();
Value v2 = new Value();
v1.i = v2.i = 100;
System.out.println(v1.equals(v2)); //调用Value的equals比较内容,如果没有,则调用缺省的比较地址
v1 = v2;
System.out.println(v1.equals(v2)); //同上说明
}
} //
您说
//调用Value的equals比较内容,如果没有,则调用缺省的比较地址
那么
vi.i=v2.i=100;
100 不是他们共同的内容吗?
class Value {
int i;
public boolean equals(Value v){
return (v.i==this.i); //比较内容
}
}
结果就是true
而expression: v1.i = v2.i = 100;只是让他们的i相等
并没有让他们的地址相等
所以false
而v1 = v2;
就是的两者完全等同
我这样理解对吗?另外,我在看James Gosling的原版《The Java Programming Language》
不知道是不是一本好书?
谢谢你了