equal判断问题!!!!

博海喻强龙 2011-10-17 02:21:55
为什么俩个相同的实体对象 内容相同 用equals进行判断为什么得出的结果是false ??
...全文
226 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
leilei0932_java 2011-10-17
  • 打赏
  • 举报
回复
重写equals与hashCode方法,对象之间的比较是需要你自己定义的,你可以定义当哪些值相等这两个对象就互相equals,在equals方法中返回你想要比较的值就可以了,下面这段代码表示只要两个对象的name相等,我就让对象互相equals:
public class Test {
String name;

public Test(String name) {
this.name = name;
}

public static void main(String[] args) {
System.out.println(new Test("a").equals(new Test("a")));
}

@Override
public boolean equals(Object obj) {
if (obj instanceof Test) {
Test t = (Test) obj;
return this.name.equals(t.name);
}else{
return false;
}
}
}

如果比较的是HashSet则还需要重写对象hashCode方法,在以上条件成立的同时返回相同的hashCode值对象才会互相equals
nizhicheng 2011-10-17
  • 打赏
  • 举报
回复
没有 因为你肯定是针对某个类写的。不会影响到其他类
博海喻强龙 2011-10-17
  • 打赏
  • 举报
回复
在ssh框架中重写equals方法有没有什么弊端?

nizhicheng 2011-10-17
  • 打赏
  • 举报
回复

public boolean equals(object o){
if(this==o) return ture;//1
if(!o instanceof Monkey)//2
return ture;
final Monkey other=(Monkey)o;
if(this.getName().equals(other.getName()))//3
return ture;
else
return false;
}
Monkey m1=new Monkey();
Monkey m2=new Monkey();



风尘中国 2011-10-17
  • 打赏
  • 举报
回复
重写equals和hashCode方法,给你一个例子


public class Player {
private String name;
private int age;

public Player(){}

public Player(String name,int age){
this.name=name;
this.age=age;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;

Player player = (Player) o;

if (age != player.age) return false;
if (name != null ? !name.equals(player.name) : player.name != null) return false;

return true;
}

@Override
public int hashCode() {
int result = name != null ? name.hashCode() : 0;
result = 31 * result + age;
return result;
}

public static void main(String[] args) {
Player p1=new Player();
p1.setAge(24);
p1.setName("梅西");
Player p2=new Player("梅西",24);
System.out.println("比较结果:"+p1.equals(p2));
}
}



[Quote=引用 7 楼 bohaiyuqianglong 的回复:]

那应该怎么进行比较类 才会是正确的 求教
[/Quote]
博海喻强龙 2011-10-17
  • 打赏
  • 举报
回复
那应该怎么进行比较类 才会是正确的 求教
八树 2011-10-17
  • 打赏
  • 举报
回复
是滴,楼上说的是滴,如果想比较内容的话就要重写equals方法,按自己的要求来进行比较。。。
nizhicheng 2011-10-17
  • 打赏
  • 举报
回复
因为这里比较不是内容 是内存实际指向的地址 。因为是两个对象,内存地址固然不同 所以为False
博海喻强龙 2011-10-17
  • 打赏
  • 举报
回复
我不想得到这个==与equals 的定义,我是想知道 俩个相同内容的对象为什么用equals比较 会返回false
clementxr 2011-10-17
  • 打赏
  • 举报
回复
楼上学习了~
nizhicheng 2011-10-17
  • 打赏
  • 举报
回复
String 类 之所以相等 是因为String类的equals方法被重写了它是把字符串拆分字符然后一个个分别去比较。所以此时就是比较内容了。
造成这种误解的原因,也就是因为很多类重写了equals方法,所以只要弄清楚当前类的情况,就很容易区分了

总结:
从Object层次来说,==与equals是相同的,都是比较内存地址;
当某个类重写了equals方法,此时equals就是比较内容,==永远是比较内存地址;

nizhicheng 2011-10-17
  • 打赏
  • 举报
回复
类都会从Object类中继承equals()方法,一般情况下equals()方法判断对象(在对内存中的实体)的值是否相等,如果相等则返回true,不相等则返回false.

51,396

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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