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的吗?
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的吗?
因此str1 与 str2 在内存中的地址是不相同的!
String类得.equals()方法。比较的才是内容。
就是对象的比较 肯定是false了
StringBuffer直接继承Object,StringBuffer是没有重写equals方法的,所以根据Object的equals方法,比较的肯定是两个对象的引用地址,所以是false
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
楼主可以结贴了
因此str1 与 str2 在内存中的地址是不相同的!正解,不多说了。