算法日记(2025/11/7)

125. 验证回文串

核心代码:

text
复制代码
//顺序读取并创建新字符串1 StringBuilder sb1 = new StringBuilder(cleaned.length()); for(int i = 0; i < cleaned.length(); i++){ sb1.append(cleaned.charAt(i)); } //逆序读取并创建新字符串2 StringBuilder sb2 = new StringBuilder(cleaned.length()); for(int i = cleaned.length() - 1; i >= 0; i--){ sb2.append(cleaned.charAt(i)); } //比较两个字符串(这里有问题) // ✅ //if(sb1.toString().equals(sb2.toString())) return true; // ❌️ if(sb1.equals(sb2) return true;

调试结果:

sb的结果:

text
复制代码
s:"A man, a plan, a canal: Panama" cleaned:"amanaplanacanalpanama" sb1:amanaplanacanalpanama sb2:amanaplanacanalpanama

equals()方法的结果:

text
复制代码
Output: false

为什么 sb1 和 sb2 内容相同返回 false :

  • StringBuilder 没有重写 equals() 方法,它继承的是 Object 类的 equals(),即比较的是对象引用是否相同
  • 即使 sb1 和 sb2 内容完全一样,sb1.equals(sb2) 也会返回 false,因为它们是两个不同的对象。

为什么使用了 toString() 结果不同了呢:

  • sb1.toString() 返回一个 String 对象。
  • String 的 equals() 方法被重写为:逐字符比较内容是否相同
  • 所以 "abc".equals("abc") → true(即使它们是不同对象)。

面试鸭:Java 中 hashCode 和 equals 方法是什么?它们与 == 操作符有什么区别? - Java 基础面试题 - 面试鸭 - 程序员求职面试刷题神器

0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
一只僵尸u
下载 APP