class C
{     int a;
C(int a)
{
this.a=a;
}
}
public class Test3 { /**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
       C a =new C(3);
       C b =new C(3);
       
       System.out.println(a==b);
       System.out.println(a.equals(b));
       
}}
为什么结果多是
FALSE
FALSE
我知道 equals 比较的市内容  但是 对象a b的内容不是一样么

解决方案 »

  1.   

    A,B 都是应用类型,a,b 是两个独立的对象因为都是new分配的 , ==比较的是两个对象的地址,所以返回的FALSE ,
      

  2.   

    不一样。因为那是对象。
     你把a.toString()和b.toString();用system输出出来看看。。
    他们的hashcode不一样的
    a.equals(b)这是比较对象。不是比较内容
    如果想实现内容的比较的话
    建议你覆盖或者说是实现equals方法。自己写比较
      

  3.   

    ==比较的是内存地址  而equals比较的是value
    当你要比较String这类的对象值是否相同的时候  用equals  不要用==    
      

  4.   

    你没覆写equals方法,比较的还是地址
      

  5.   

    在比较字符型数据时,==比较的是内存中的地址,比较的是对象的句柄;而equals()比较的是地址内的内容,比较的是对象.
    ==是java内置的,可以理解为"相同"。对于简单类型来说,a=3,b=3,我们可以说a和b相同,也可以说a和b相等,都没什么问题。   
      .equals()是Object的方法,可以理解为"相等"。显然两个object相等并不意味着相同;但是需要注意的是,也并不意味着他们对应内存区域的所有字节都相等,比如(但不限于这个原因)他们内部可能还有自己的引用。所以,两个对象是否相等,只有这个对象自己才知道如何判断,java并不知道。所以就需要该类自己提供一个equals方法==用于比较两个引用是否指相同一个对象实例。   
      equals()方法在缺省条件下的含义同==一样,但是你可以对不同的类重载equals()方法类实现自己的相等定义,比如String类就重载了equals()类比较两个字符串的内容。   
      还有注意equals的参数是Object因此有可能传入的对象与你的类不同,因此在重载equals()方法是要检查类型,并作动态的“下溯造型”
    太多了
      

  6.   


    equals比较内容是对于String来说额,一般来说,要自己定义equals方法才可以让其按照自己的需要比较内容,否则就是用的基类Object版本的equals,比较的是内存地址
      

  7.   

    很多人误认为只有==是比较对象内存地址,而equals就是比较对象内容,
    其实equals在object类中的实现就是比较对象内存地址,只有子类重新复写了之后才可以实现比较对象内容。
      

  8.   

    Object类型的equals方法其实就是==
    必须自己重写equals方法,要么toString()后在调用equals方法
      

  9.   

      C a =new C(3); 
      C b =new C(3); 
    a b 对象肯定会申请不同的内存地址和空间,== 和 a.equals(b) 肯定会不同
      

  10.   

    把下面代码放到类C里面看看结果
    public boolean equals(C c){
       if(this.a==c.a){
         return true;
       }else
           return false;
    }
      

  11.   

    把下面代码放到类C里面看看结果
    public boolean equals(C c){
       if(this.a==c.a){
         return true;
       }else
           return false;
    }
      

  12.   

    同意9楼的。其实很多类的equals已经被重写过了,所以给很多初学者这样的误解误以为equals 是比较内容
      

  13.   

    你知道equals是比较内容,但你知道a的内容是什么吗?你知道b的内容又是什么吗?既然还没搞清楚这个所谓的内容,你怎么肯定它们内容相等呢?
      

  14.   

    equals判断内容相等...==比较的是取值...
      

  15.   

    呵呵
    我想你弄错了
    一般情况下equals与==是一样的的效果,都是比较地址的
    你看到的String啊或Intger等都重写了equals方法
    想要达到你想要的结果就重写下equals方法吧
      

  16.   

    因为你的类没有重写equals方法。
      

  17.   

    他们的hashcode不一样的支持2楼
      

  18.   

    完整程序应该这么写class C{
    int a;
    C(int a){
    this.a=a;
    }
    public boolean equals(Object obj){
    if(obj instanceof C){
    C target=(C)obj;
    if(this.a==target.a){
    return true;
    }else{
    return false;
    }
    }else{
    return false;
    }
    }
    }
    public class Test3 {
    public static void main(String[]args){
    C a=new C(3);
    C b=new C(3);
    System.out.println(a.equals(b));
    }
    }
      

  19.   

    ==比较的是值
    而.equals();比较的是句柄
      

  20.   

    ==比较的地址 所以是 false
    equals()比较两个对象的时候.实际上是比较的hashcode你new两次所以这两个对象的hashcode是不一样的,这两个对象的内容是一样.所以我们比较两个对象内容的时候通常重写equals()方法,同时也要重写hashcode方法
      

  21.   

    学习
    感觉equals没那么智能吧,应该自己重写