You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用equals方法对比String和StringBuffer为何得到错误结果?如何修复?

问题原因

  • Java中String类的equals方法实现逻辑会先判断传入的对比对象是否为String类型,若类型不匹配会直接返回false。你代码中拿String类型的原字符串和StringBuffer类型的反转对象直接对比,类型不一致自然返回false,和二者的字符内容无关。
  • 另外StringBuffer本身没有重写Object的equals方法,就算调换对比顺序写sb.equals(s1),也是对比两个对象的内存地址,不会对比内容,同样无法得到正确结果。

修复方案

最简修复

将StringBuffer对象转为String后再做内容对比,修改判断条件即可:

if(s1.equals(sb.toString()))

修复后完整代码:

String s1= "121";
System.out.println();

StringBuffer sb = new StringBuffer(s1);
sb.reverse();
System.out.println(sb);

if(s1.equals(sb.toString()))
{
    System.out.println("Palindrome");
}
else
{
    System.out.println("Not palindrome");
}

可选优化

如果是单线程场景,不需要线程安全保障,推荐使用性能更高的StringBuilder替代StringBuffer,也可以直接使用String的contentEquals方法直接和字符序列对象对比,无需手动转String:

String s1= "121";
StringBuilder sb = new StringBuilder(s1);
sb.reverse();
if(s1.contentEquals(sb)) {
    System.out.println("Palindrome");
} else {
    System.out.println("Not palindrome");
}

内容的提问来源于stack exchange,提问作者MANAS2021

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 14:06:04