{
int i;
public static void main(String [] args)
{
Text one = new Text();
Text two = new Text();
one.i = two.i = 100;
System.out.println(one.equals(two));
}
}
这个所打印出来的值为什么是FALES而不是TRUE啊??
[此贴子已经被作者于2006-11-27 23:57:37编辑过]
主要是因为你没有重写定义在Object类中的equals方法
所以你调用equals的时候,实际上调的是Object类中的equals方法,它默认的实现是比较两个对象的地址是不是一样
public class EqualsDemo{
public static void main (String [] args){
Integer a = new Integer (10);
Integer b = new Integer (10);
System.out.println("a.equals(b) = " + a.equals(b));
Number num1 = new Number();
Number num2 = new Number();
num1.i = num2.i = 30;
System.out.println("num1.equals(num2) = " + num1.equals(num2));
num1 = num2;
System.out.println("after num1 = num2");
System.out.println("num1.equals(num2) = " + num1.equals(num2));
}
}
class Number{
int i;
}
(1)大家可以看到结果,a.equals(b)的结果为true。
(2)当num1.i = num2.i = 30;后再进行num1.equals(num2)其结果为false
(3)当num1 = num2;后再进行num1.equals(num2)其结果为true。
为什么会这样呢?其原因就是我们并没有对Object的equals进行复写,而Object的equals方法是对对象的引用进行比较,(2)只代表其对象中的值是相同的,对象并不相同即其地址并不相同。而(3)其引用是相同的,是指向同一地址的。如果我们在num1 = num2后面加上一句:num1.i = 1;然后我们再System.out.println(“num2.i=”+ num2.i);时会发现其输出的结果是:1;就是这样的。
如果我们想让(2)的结果也输出true则需对equals方法进行复写,下面是在类Number中对equals方法进行复写
class Number{
int i;
public boolean equals(Object t){
if(this.i == ((Number)t).i)
return true;
else
return false;
}
}
这样就可以得到true的结果了。
下面是复写equals后得到的运行结果。