关于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?? 展开
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?? 展开
12个回答
展开全部
这是因为你当前的类调用的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;
}
}
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;
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
两个都是false是正常的,因为你用的equals还是原始的Object中的方法,他默认是和"=="作用一样的!你要想他返回true,那么就根据需要去重写下就好了的!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
都为false
在代码中加入这2句,你就明白了!
System.out.println(test1.hashCode());
System.out.println(test2.hashCode());
equals()方法在子类没有进行重写时,如进行比较会调用继承自Object父类的int hashCode()方法,根据返回的int值是否相同判断两个对象是否相等。
第二个为false就是因为两个对象的hashCode值不一样,所以为false。
子类进行equals()方法重写时,推荐把hashCode方法也重写了!
在代码中加入这2句,你就明白了!
System.out.println(test1.hashCode());
System.out.println(test2.hashCode());
equals()方法在子类没有进行重写时,如进行比较会调用继承自Object父类的int hashCode()方法,根据返回的int值是否相同判断两个对象是否相等。
第二个为false就是因为两个对象的hashCode值不一样,所以为false。
子类进行equals()方法重写时,推荐把hashCode方法也重写了!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我是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
}
}
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
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
test1 和test2 在内存中的显示是不同的,equls比的是值,不是内存中的地址
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询