StringBuffer sb=new StringBuffer("abc");
StringBuffer sb1=new StringBuffer("abc");
System.out.print(sb==sb1);   //false
System.out.print(sb.equals(sb1)); //false               为什么用都输出false? 它们的值得不是相等吗,请问为什么?

解决方案 »

  1.   

    我看了下源码 貌似stringbuffer没有重写equals方法 所以不能用来比较字符串是否相等
    可以转成String来比较
      

  2.   

    这个类没有 重写  equals  方法 至相当于  Object的 方法 
      

  3.   

    StringBuffer 没有equals这个方法, 要把它toString之后才可以比较.
      

  4.   

    System.out.print(sb.toString().equals(sb1.toString())); 
      

  5.   

    StringBuffer,StringBuilder两个类都没有重写equals方法,默认就是==
      

  6.   

    错了, StringBuffer有equals这个方法.                  StringBuffer sb = new StringBuffer("abc");
    StringBuffer sb1 = new StringBuffer("abc");
    System.out.println(sb.toString().equals(sb1.toString()));   //true
    System.out.println(sb.equals(sb1));    //false
    System.out.println(sb==sb1);            //false
      

  7.   


    System.out.println(sb.toString()==sb1.toString());            //false
      

  8.   

    sb==sb1------------------>false它们是两个不同对象,在内存的地址不同,==比较的是地址,所以是false。
    sb.equals(sb1)----------->false(没重写超类object的equals方法) 
    api的解释:
    Object 类的 equals 方法实现对象上差别可能性最大的相等关系;即,对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true(x == y 具有值 true)。 
    注意:当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。
      

  9.   

    重写equals的只有String类,File类和Date和所有的包装类
    其他的要想比较必须重写equals方法
      

  10.   

    StringBuffer类中没有重新定义equals这个方法,因此这个方法就来自Object类,
    而Object类中的equals方法是用来比较地址的,所以等于false.