因为你的Value没有重载equals方法,结果
v1.equals(v2) 等价于 v1 == v2 ,判断地址是否相等。肯定不等嘛Integer重载了equals方法,
I1.equals(I2)实际上Integer里面的方法会判断两个对象的值是否相等,而不是地址,所以为真
v1.equals(v2) 等价于 v1 == v2 ,判断地址是否相等。肯定不等嘛Integer重载了equals方法,
I1.equals(I2)实际上Integer里面的方法会判断两个对象的值是否相等,而不是地址,所以为真
{
return this.i == val.i?true:false
}
class Value {
static int i;
public Value(int par){
i=par;
System.out.println("xxxxxx:"+i);
}
public boolean equals(Object o){
if(o instanceof Value ){
Value v = (Value)o;
if(v.i==this.i) return true;
else return false;
}
return false;
}
}
看了你的代码我忍不住晕倒
你的代码应该这样写:
public boolean equals(Value val)
{
return (this.i == val.i);
}
to 顶楼的:
不要把i 定义成static,肯定不是你想要的
他的代码可能不是特别简练,但是也不要被晕倒。谁何尝不是那么走过来的。
public final class Integer extends Number implements Comparable {
//略
private int value;
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
}
要实现同样的功能,就要重载equals方法
还有
class Value {
static int i; //static 感觉有问题,应该是private 才好,不然,这些值不就都相等了
}
建议
class Value {
private int i;
public Value(int par){
this.i=par;
System.out.println("xxxxxx:"+i);
}
public boolean equals(Object o){
if(o instanceof Value ){
return this.i == ((Value)o).i;
}
return false;
}
}