在比较字符型数据时,==比较的是内存中的地址,比较的是对象的句柄;而equals()比较的是地址内的内容,比较的是对象.

解决方案 »

  1.   

    如果比较的是Integer型或自定义的类呢?
    public static void main(String[] args) 
    {
    Integer n1 = new Integer(47);
    Integer n2 = new Integer(47);
    MyInt m1 = new MyInt(); 
    MyInt m2 = new MyInt();
    m1.value = 100;
    m2.value = 100;
               System.out.println("n1 == n2 : " + ( n1 == n2 ));
               System.out.println("n1.equals(n2) : " + n1.equals(n2));
               System.out.println("m1.equals(m2) : " + m1.equals(m2));

    class MyInt
    {
      int value;
    }
      

  2.   

    ==是java内置的,可以理解为"相同"。对于简单类型来说,a=3,b=3,我们可以说a和b相同,也可以说a和b相等,都没什么问题。
    .equals()是Object的方法,可以理解为"相等"。显然两个object相等并不意味着相同;但是需要注意的是,也并不意味着他们对应内存区域的所有字节都相等,比如(但不限于这个原因)他们内部可能还有自己的引用。所以,两个对象是否相等,只有这个对象自己才知道如何判断,java并不知道。所以就需要该类自己提供一个equals方法
      

  3.   

    由于JAVA中除基本数据类型外其它一切都是对象,而对象变量存储的都是引用,相当于C中的指针,所以在比较对象时如String,用==是比较两个变量是否指向同一个对象,而用equals才是比较两个String的内容是否相等
      

  4.   

    == 比较的是 句柄
    equals() 比较的东西是这个方法自己决定的,例如你自己重构它
    一般情况下,java中的类是重构了它的,用来比较对象的内容。
    注意,如果你的类不重构的话,equals() 的作用等同于 ==
    String 的情况有点特殊,看下面这个例子:
    class equals 
    {
    public static void main(String[] args) 
    {
    String a="java";
    String b="java";
    String c=new String("java");
    String d=new String("java");
    String ja="ja";
    String va="va";
           ja+=va; 
    System.out.println(a==b);
    System.out.println(a==c);
    System.out.println(c==d);
    System.out.println(ja==a);
    System.out.println(ja==c); int[] a1={1,2,3,};
    int[] b1={1,2,3,};
    int[] c1=new int[3];
    int[] d1=new int[3];
    for (int n=0;n<3 ;n++ )
    {
    c1[n]=n+1;
    d1[n]=n+1;
    }
    System.out.println(a1==b1);
    System.out.println(a1==c1);
    System.out.println(c1==d1);
    }
    }
    如果String 在编译的时候就得到值的话,那么句柄指向的就是同一个对象。
    这种情况对 数组 不适用
      

  5.   

    这个问题一楼的基本上说得很透彻了。
    虽然鸟也来过了,但我还想再补点:equals()可以自己实现,但必须保证互反性原则,否则可能出问题(一般发生在使用集合类时)。在有些场合里,按自己的逻辑覆盖equals(),为使该类的对象作为Hashtable的key时达到唯一,还得按自己的逻辑覆盖hashCode()方法。
      

  6.   

    equals()方法是用来检测两个对象的内容是否相等/ 
    而==的比较分两种:一种是比较基本数据类型,例如int,那么比较的就是基本数据类型的值; 
    如果比较的是对象,例如String,那么比较的是两个句柄是否指向内存中的同一个对象。!
      

  7.   

    ==比较的是对象的句柄 , equals()比较的是对象.
      

  8.   

    1:==基本类型之间的比较包括int ,short ,reference等
      equals()是对象之间的比较,缺省(Object中)的是对象引用的比较,但是可以重载。
    2:equals()和==在语义上是不同的,==是作为标识符嵌入到java语言的语法中,而equals()是作为一个类方法实现。java的指称语义,必须描述==,但是不用描述equals()方法。
      

  9.   

    ==是对成的 ,A==B =>B==A
    equals()就不一定,虽然在大多数的条件下是
      

  10.   

    == 比较的是 句柄
    equals()比较的是 句柄的内容
      

  11.   

    equal()是对象的相等;String s.equal("");
    ==是数据类型和空值的相等:1==1, a==null;
    经验之谈。不一定完全正确。
      

  12.   

    我觉得自己定义equal比较好。不然我不知道他干些什么
      

  13.   

    ==用于比较两个引用是否指相同一个对象实例。
    equals()方法在缺省条件下的含义同==一样,但是你可以对不同的类重载equals()方法类实现自己的相等定义,比如String类就重载了equals()类比较两个字符串的内容。
    还有注意equals的参数是Object因此有可能传入的对象与你的类不同,因此在重载equals()方法是要检查类型,并作动态的“下溯造型”
      

  14.   

    如果你比较自己定义的类型,在比较之前一定要重载equals()方法,否则你用equals比较就会是==的效果。