equals比较的不是值么,指点一二.

class Tt{
int i;
}
public class Test{
public static void main(System [] args){
  Tt aa=new Tt();
  Tt bb=new Tt();
aa.i=bb.i=100;
System.out.println(aa.equals(bb));
}
}
Thinking in java中的程式,为什么这个结果是false,equals比较的不是值么,指点一二.

作者: 浪客剑心   发布时间: 2004-04-21

equals来源于哪个类,什么时候得不到预期的结果,象上面这种情况?

作者: 浪客剑心   发布时间: 2004-04-22

应该来自object,当两个类变量各字实例化一个类后,即各自开辟内存空间,两个类就一定不相等,如果两个类变量指向同一个类实例,即指向同一块内存空间,即相等。

作者: qsy_627   发布时间: 2004-04-22

是比较两个值是否相等,也比较对象。如果比较的值是空值的话会引发一个空的异常,可以用另外一个.equalsIgnorecase来比较。

作者: 雨伞   发布时间: 2004-04-23

但是三楼的说法应该是==号比较吧,要看引用变量(句柄)是否指向同一对象,是则ture否则false而equals是不论对象和句柄的,只要它俩长的一样,就ture不是么?
还是不明白

作者: 浪客剑心   发布时间: 2004-04-26

看看JAVA的官方网站,那里的教程写的很详细的

作者: qsy_627   发布时间: 2004-04-27

是比较字符串是否相同。

作者: 飞光   发布时间: 2004-04-27

Tt是从通用的Object根类继承的,因此也继承了equals()方法,该方法比较对象的地址。因为是前后两个不同的对象,因此结果自然是false了。

作者: cnhfyy   发布时间: 2004-04-27

你想要的结果是true,可以得到。你是要比较对象(属性),可以比较。但是你必须从写equals方法,因为任何一个类用它都是从Object继承来的,
如果不重写equals方法,实际上的equals方法并不知道比较的那两个类的对象的属性是什么,因此自然是false了,因此不重写equals方法,比较的值永远是false。

作者: l乐天   发布时间: 2004-05-02

关于复写equals可以参看core java 的第一册,那个里面说得相当精准

作者: hyflashstar   发布时间: 2004-05-02