public class Palindrome { public static void main(String [] args){
Palindrome Pa = new Palindrome();

boolean flag = Pa.test(args[0]);

if (flag){
System.out.println("字符串是 Palindrome!");
}else{
System.out.println("字符串不是 Palindrome!");
}
}
/**
 * 下面是我自己写的方法,各位大侠,为什么String strReverse = str.reverse().toString();句必须要转换为String的啊!
 * StringBuffer 和 StringBuffer 之间的比较 同 String 和 Sting 之间的比较有什么不同?
 * 我还是新手,不明白为什么 StringBuffer 之间比较的时候就会出错!!
 */
public boolean test(String strOriginal){
StringBuffer str = new StringBuffer(strOriginal);
System.out.println("Palindrome 的输入结果是:" + str);
String strReverse = str.reverse().toString();
System.out.println("Palindrome 的对比结果是:" + str);

/**
 * StringBuffer 之间的比较
 */
// if(str.equals(str.reverse())){
// return true;
// }else{
// return false;
// }

/**
 * String 之间的比较
 */
if (strReverse.equals(strOriginal)){
return true;
}else{
return false;
}
}
}

解决方案 »

  1.   

    String是固化的字符串,任何改变字符串内容的操作(如上面的reverse)结果都是产生一个新的String对象,而不是改变当前String对象本身。StringBuffer是一个字符串缓冲,任何改变字符串内容的操作(如上面的reverse)都可能对当前StringBuffer对象的内容生成改变。因此,你的str.reverse()的时候,实际是str的内容已经改变成反序的字符串了。StringBuffer的reverse会返回自身,这在文档里写得清清楚楚Returns:
    a reference to this object你可以简单的做一个试验:
            System.out.println("之前: " + str);
            str.reverse();
            System.out.println("之后: " + str);
    这样就能看到str的改变。
      

  2.   

    StringBuffer没有自己的equals方法,用的是Object的equals方法,也就是用==比较两者是否为同一个对象。所以StringBuffer不要直接用equals比较,而要换成String之后,用equals比较。
      

  3.   

    z_lping(Schemer) 说是对,举例如下:
    public class Test {    public static void main(String[] args) {
            StringBuffer a = new StringBuffer("abcd");
            StringBuffer b = new StringBuffer("dcba");
            b.reverse();
            System.out.println(a);
            System.out.println(b);
            System.out.println(a.equals(b));
            System.out.println(a.toString().equals(b.toString()));
        }
    }输出结果
    abcd
    abcd
    false
    true明明a和b的内容都是abcd但是a.equals(b)就是为false,而toString()之后再equals就是true。