Map<String,String> map1 = new HashMap<String,String>();
map1.put("1","3");
Map<String,String> map2 = new HashMap<String,String>();
map2.put("1","3");
System.out.println( map1.equals(map2) );//为什么这里返回true.

A a1 = new A();
a1.setA("2");
A a2 = new A();
a2.setA("2");

System.out.println( a1.equals(a2) );//为什么这里返回false.
class A
{
private String a; public String getA()
{
return a;
} public void setA(String a)
{
this.a = a;
}

}map1,map2不也是对象吗,为什么会相等, a1,a2也是对象啊,为什么不等。

解决方案 »

  1.   

    MAP之所以相等,是因为重写了equals方法; A的对象不相等,是因为你没有重写equals方法。
      

  2.   

    Map重写了equals的方法,你自己定义的类没有重写.调用的是Object的equeals()
      

  3.   

    你的类A没有override equals方法,当然返回的是false
    从Object继承过来的equals直接判断引用,也就是==,所以两个new A肯定是不equals的Hashmap的equals你可以跟进去看看就知道为什么是true了
      

  4.   

    class A
    中没有重写equals方法,用的是Object中定义的,那个方法是比较对象的引用是否相同的.
      

  5.   

    好快的剑!!!刚想回答,一刷新就变7楼了- -问题就在你没有重写equals()方法
      

  6.   

    HashMap的equals并不是判断地址
    它有自己的equals实现而A是判断地址