关于JAVA的==和equals问题!

publicclassTest{publicstaticvoidmain(Stringargs[]){Testtest1=newTest();Testtest2=newT... public class Test {
public static void main(String args[])
{
Test test1 = new Test();
Test test2 = new Test();
System.out.println(test1 == test2);
System.out.println(test1.equals(test2));
}
}

为什么第二句结果是false??
展开
 我来答
movestory
2011-06-21
知道答主
回答量:2
采纳率:0%
帮助的人:0
展开全部
这是因为你当前的类调用的equals方法为Object类下的:
public boolean equals (Object o) {
return this == o;
}
看到这段源码你应该能知道为什么第二句结果是false了,
因为默认的equals 是对两个对象进行了"=="比较,
所以如果你想要当前类的equals
为true的话你就的重写Object的equlas方法!
如最简单的重写方法:
public boolean equals(Object o) {
if (this == o)
return true;
if (o instanceof Test) {
return true;
} else {
return false;
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
巢箫笛0J6
2011-06-21 · TA获得超过2177个赞
知道小有建树答主
回答量:1125
采纳率:50%
帮助的人:715万
展开全部
两个都是false是正常的,因为你用的equals还是原始的Object中的方法,他默认是和"=="作用一样的!你要想他返回true,那么就根据需要去重写下就好了的!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cheal03
2011-06-21
知道答主
回答量:16
采纳率:0%
帮助的人:13.8万
展开全部
都为false
在代码中加入这2句,你就明白了!
System.out.println(test1.hashCode());
System.out.println(test2.hashCode());

equals()方法在子类没有进行重写时,如进行比较会调用继承自Object父类的int hashCode()方法,根据返回的int值是否相同判断两个对象是否相等。

第二个为false就是因为两个对象的hashCode值不一样,所以为false。

子类进行equals()方法重写时,推荐把hashCode方法也重写了!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
8楼写错了
2011-06-21
知道答主
回答量:1
采纳率:0%
帮助的人:0
展开全部
我是8楼 关于equals的地方写错了 toString与对象比较无关

public class Test {
//对象的唯一标识。当你需要使用到equals方法时,类中应该会有一个这样的数据成员。
private int id;
public Test() { }
public Test(int i) { id = i; }
//重载equals
public boolean equals(Object obj) {
//instanceof 判断对象obj是否属于Test类型
if(obj instanceof Test) {
//比较id
return ((Test)obj).id == id;
}
return false;
}
public static void main(String[] args) {
Test t1 = new Test(1); //注意参数
Test t2 = new Test(1);
Test t3 = new Test(3);
System.out.println(t1 == t2); //false
System.out.println(t1.equals(t2)); //true
System.out.println(t1.equals(t3)); //false
t1 = t2;
System.out.println(t1 == t2); //true
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zz270564642
2011-06-21 · TA获得超过238个赞
知道小有建树答主
回答量:342
采纳率:0%
帮助的人:170万
展开全部
test1 和test2 在内存中的显示是不同的,equls比的是值,不是内存中的地址
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式