public class Palindrome {
public static void main(String[] args) {
StringBuffer str1 = new StringBuffer("hjh");
StringBuffer tmp = new StringBuffer(str1);
StringBuffer str2 = new StringBuffer(tmp.reverse());
System.out.println(str1);
System.out.println(str2);
System.out.println(str1.equals(str2));
}
}
最后输出结果是
hjh
hjh
false
不是应该是true的吗?

解决方案 »

  1.   

    你每次都新new了一个对象怎么可能是true
      

  2.   

    这个equals比较的是两个对象的地址!地址不一样所以false
      

  3.   

    StringBuffer  创建的对象 调用equals()方法,是调用Object 老祖宗类的equals()方法,比较的是两个对象的引用地址!StringBuffer  类  并没有重写equals()方法!
    因此str1  与  str2  在内存中的地址是不相同的!
      

  4.   

    用equest比较的是内容,==比较的才是地址
      

  5.   

    不过。这里StringBuffer比较的却是是地址。楼上已经说了,它没有重写。equals方法。
    String类得.equals()方法。比较的才是内容。
      

  6.   

    包装类和String类已经重写了equals()方法,这些类的equals()方法比较的是值!
      

  7.   

    StringBuffer没有重写equals方法
    就是对象的比较 肯定是false了
      

  8.   

    3楼说的没错。
    StringBuffer直接继承Object,StringBuffer是没有重写equals方法的,所以根据Object的equals方法,比较的肯定是两个对象的引用地址,所以是false
      

  9.   

    6楼的说法对StringBuffer来说是错误的,StringBuffer并没有重写Object的equals方法,可以直接将JDK的源码拿出来看看就可以了,所以equals方法具体的代码实现是Object的,也就是下面这段
    public boolean equals(Object obj) {
    return (this == obj);
        }
    因此对与默认的JDK实现的StringBuffer来说,调用equals和==效果完全等同,这一点上与String存在差别,我们知道String的equals是比较内容的,equals与==结果可能一样也可能不一样。代码里面你new 了两个对象,在运行时给对象分配的地址不同,所以equals比较结果是不同的,除非你是写成这样
    StringBuffer tmp2 = str1; 然后比较str1.equals(tmp2)结果为true,而写成StringBuffer tmp2 = new StringBuffer(str1)比较结果就false
    楼主可以结贴了
      

  10.   

    没有重写equals的话是Object里的方法了     可以看源代码    Object里是==判断的   
      

  11.   

    StringBuffer 创建的对象 调用equals()方法,是调用Object 老祖宗类的equals()方法,比较的是两个对象的引用地址!StringBuffer 类 并没有重写equals()方法!
    因此str1 与 str2 在内存中的地址是不相同的!正解,不多说了。