有个问题想不明白请教一下~

llm0528 2008-07-09 03:33:17
class Test1{
int i;
}

public class Test2{
public static void main(String[] args){
Test1 t1 = new Test1();
Test1 t2 = new Test1();
t1.i = t2.i = 100;
System.out.println(t1.equals(t2));
}
}


为什么这个结果是false啊?equals不是直接比较2个值吗?
...全文
91 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
llm0528 2008-07-09
  • 打赏
  • 举报
回复
我之所以想不通就是,以前做string类型的比较时,就可以用 equals 来比较其中的值,而不是引用,正纳闷为什么到了数字 int 比较的时候居然变成了 false 感谢各位的回答啊,尤其 2 和 8楼,都以代码直观的方式来帮我解答。
sagezk 2008-07-09
  • 打赏
  • 举报
回复
你的类 Test1 打超类 Object 继承下来的 equals 方法的源代码如下:

	public boolean equals(Object obj) {
return (this == obj);
}


它只比较引用是否相等,和 t1 == t2 没什么区别。

你可以自己覆盖 equals 方法,来实现真正的相等性测试,如下:

public class EqTest {

private int i;

public boolean equals(Object obj) { //覆盖了超类继承下来的 equals 方法来实现自己真正的相等性测试
if (obj == this) return true; //如果引用都相等那这两个就是同一个对象,当然自己与自己相等
if (obj == null) return false; //如果传进来空引用,那就不必比较了,真实的对象肯定同虚无不相等
if (obj.getClass() != this.getClass()) return false; //如果两个对象不是同类就根本没有可比性,当然不等
EqTest other = (EqTest) obj; //将 obj 强制转换为它实际的类型
return other.i == this.i; //根据两个属于同一个类的不同对象的实例域的值来判断这两个对象是否相等
}

public static void main(String[] args) {
EqTest t1 = new EqTest();
EqTest t2 = new EqTest();
t1.i = t2.i = 100;
System.out.println(t1.equals(t2));
}

}
Even__Chung 2008-07-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 java2000_net 的回复:]
你没有实现Test的equals方法,默认是比较内存地址的,当然不等了!
[/Quote]

equals 和 =
equals 和 ==
都是不一样的.!

老紫竹解释了!!
愿楼主好运吧.!!
jingulang 2008-07-09
  • 打赏
  • 举报
回复
楼上说的不对

如果没重写equals()方法的对象 调用equals() 其实就是做==操作

像String 之间的比较,比较的是内容,因为String 这个类重写了equals()方法
ArthurCX 2008-07-09
  • 打赏
  • 举报
回复
恩,equals方法好像是比较对象的,同一类的对象才会返回true,看老紫竹的就行了···嘿嘿····
jingulang 2008-07-09
  • 打赏
  • 举报
回复
你这个类没有重写Object类的equals()方法

所以你用.equals() 就直接调用了 Object类的.equals()方法(代码在楼上贴着)

老紫竹 2008-07-09
  • 打赏
  • 举报
回复
class Test1{
int i;
public boolean equals(Object obj){
if(obj instanceof Test1){
return i==((Test1)obj).i;
}
return false;
}

}
老紫竹 2008-07-09
  • 打赏
  • 举报
回复
你没有实现Test的equals方法,默认是比较内存地址的,当然不等了!

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧