首页 | 新闻 | 交流 | 问吧 | 文档 | 手册 | 下载 | 博客

收藏此问题 发表新评论

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 20:09:00
equals来源于哪个类,什么时候得不到预期的结果,象上面这种情况?
昵称: 浪客剑心  时间: 2004-04-22 19:40:00
应该来自object,当两个类变量各字实例化一个类后,即各自开辟内存空间,两个类就一定不相等,如果两个类变量指向同一个类实例,即指向同一块内存空间,即相等。
昵称: qsy_627  时间: 2004-04-22 23:03:00
是比较两个值是否相等,也比较对象。如果比较的值是空值的话会引发一个空的异常,可以用另外一个.equalsIgnorecase来比较。
昵称: 雨伞  时间: 2004-04-23 10:33:00
但是三楼的说法应该是==号比较吧,要看引用变量(句柄)是否指向同一对象,是则ture否则false而equals是不论对象和句柄的,只要它俩长的一样,就ture不是么?
还是不明白
昵称: 浪客剑心  时间: 2004-04-26 22:03:00
看看JAVA的官方网站,那里的教程写的很详细的
昵称: qsy_627  时间: 2004-04-27 09:34:00
是比较字符串是否相同。
昵称: 飞光  时间: 2004-04-27 13:58:00
Tt是从通用的Object根类继承的,因此也继承了equals()方法,该方法比较对象的地址。因为是前后两个不同的对象,因此结果自然是false了。
昵称: cnhfyy  时间: 2004-04-27 14:32:00
你想要的结果是true,可以得到。你是要比较对象(属性),可以比较。但是你必须从写equals方法,因为任何一个类用它都是从Object继承来的,
如果不重写equals方法,实际上的equals方法并不知道比较的那两个类的对象的属性是什么,因此自然是false了,因此不重写equals方法,比较的值永远是false。
昵称: l乐天  时间: 2004-05-02 00:31:00
关于复写equals可以参看core java 的第一册,那个里面说得相当精准
昵称: hyflashstar  时间: 2004-05-02 18:40:00