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

为什么Java中不等的原字符串与反转字符串比较返回true?

问题原因解析

StringBuilder属于可变字符序列,它的reverse()方法是原地修改当前对象内部存储的字符内容,且方法返回值就是当前对象自身的引用,不会生成新的StringBuilder实例,这是问题出现的核心原因:

  • 执行StringBuilder stringReverse = string.reverse();时,调用reverse()会直接把string指向的对象内容从abb修改为bba,同时返回的引用直接赋值给stringReverse,最终string和stringReverse指向的是完全相同的StringBuilder对象
  • 后续调用string.toString()和stringReverse.toString(),本质是对同一个对象做内容序列化,得到的字符串完全一致,因此equals比较返回true
正确实现回文判断的代码示例

如果要得到预期的判断结果,需要先保存原字符串的内容,再执行反转操作,修改后的代码如下:

public class Main
{
    public static void main(String[] args) {
        StringBuilder string = new StringBuilder("abb");
        // 先存储未被修改的原字符串内容
        String originalContent = string.toString();
        // 执行反转并得到反转后的字符串
        String reversedContent = string.reverse().toString();
    
        if(originalContent.equals(reversedContent)){
            System.out.println(true);
            return;
        }
    
        System.out.println(false);
    }
}

上述代码运行后会输出你预期的false。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 23:09:04