字符串回文判断问题排查:为何始终输出‘not palindrome’?
回文判断代码错误分析与修复
错误原因
核心问题是不同类型对象的equals比较逻辑不匹配:
st是String类型,st1是StringBuffer类型String的equals()方法会先校验传入对象是否为String实例,不是则直接返回false;StringBuffer默认的equals()方法只比较对象引用(和==行为一致),所以无论内容是否相同,两者的equals比较结果都是false,导致始终走else分支输出"not palindrome"。
修复方案
方案1:将StringBuffer转为String后再比较
public static void main(String[] args) { String st = "iti"; StringBuffer st1 = new StringBuffer(st); st1.reverse(); System.out.println(st1); // 把StringBuffer转为String后,用String的equals比较内容 if (st.equals(st1.toString())) { System.out.print("palindrome string"); } else { System.out.print("not palindrome"); } }
方案2:直接使用StringBuilder反转并转成String(更简洁)
public static void main(String[] args) { String st = "iti"; String reversedSt = new StringBuilder(st).reverse().toString(); System.out.println(reversedSt); if (st.equals(reversedSt)) { System.out.print("palindrome string"); } else { System.out.print("not palindrome"); } }
测试结果
运行修复后的代码,输入"iti"会依次输出iti和palindrome string,符合回文判断的预期。
内容的提问来源于stack exchange,提问作者Shakti
相关产品推荐
相关产品推荐

