ObjectA a=new ObjectA() ,ObjectB b=new ObjectB()
请问
if(a==b){}

if(a.equals(b)){}
有什么区别?

解决方案 »

  1.   

    a.equals(b)你可以复写此方法,可以更符合实际。
      

  2.   

    你应该多看 FAQ 帖, 这里一大把.有区别.
    a==b 比较的是对象的引用,判断 a ,b 是不是同一个东西.a.equals(b) 
    则是一个可以被重写的方法 ,但是 Object 中默认的 a.equals (b) 是比较 a==b 
    你可以在你的类中重写它, 比如
    class A{
      int a;
      A(int _a){ a= _a;}
      public boolean equals(Object o){  
          if( this==o)return true;
          if( !( o instanceof A ))return false;
          return a== ((A)o).a;
     }  public static void main(String[]args){
        A  aa = new A(3);
        A  bb = new A(3);
       
        System.out.println(" aa == bb : "+ (aa==bb));  // 返回 false, 因为aa,bb 不是同一个东西
        System.out.println(" aa.equals(bb) :"+aa.equals(bb));//返回 true ,只是比较 A.a ;
    }
      

  3.   

    简单的说
    "a==b"是既要地址相同,值也要相同,两者要在同一块内存区域才叫相等;
    而"a.equals(b)"只需要值相同就OK了给个例子你就明白了:
    String a=new String("xx");
    String b=new String("xx");
    System.out.println(a==b)//将返回false,因为a,b是两个对象,不在同一块内存区域,而用equals就
                            //会返回true的;
      

  4.   

    基本类型是按值传递的,所以int a=1,b=1;(a==b) return true!!
    其他类型是按地址引用的,所以String a="1",String b="1";(a==b)  return false;(因为引用的地址不同)
    a.equals(b)  return true (内容相同) 顺带说一句  String a="1"; 产生了两个实例!一个是变量a的内容为字符串“1”的地址,另一个就是字符串“1”.
      

  5.   

    基本类型是按值传递的,所以int a=1,b=1;(a==b) return true!!
    其他类型是按地址引用的,所以String a=new string("1");String b=new string("1");(a==b)  return false;(因为引用的地址不同)
    a.equals(b)  return true (内容相同)如果String a="1",String b="1",(a==b) return true!(指向了同一个对象) 顺带说一句  String a="1"; 产生了两个实例!一个是变量a的内容为字符串“1”的地址,另一个就是字符串“1”.
      

  6.   

    ==只有要比较的引用地址和内容都相等时才返回true
    equals只要内容相等就返回true
      

  7.   

    通俗地说,假如有两兄弟,设他们长像一样,'==' 就是判断他们是否为同一个人,
    而equals就是判断他们长像是否一样;