算法日记(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:amanaplanacanalpanamaequals()方法的结果:
▼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个评论
全部评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
内容推荐
Day 74时间15:00~ 18:00(3h)✅ 今天做了:过滤器、拦截器⏰ 明天计划:AOP📚 今日感悟:过滤器对所有请求做统一预处理(如编码、压缩);拦截器在具体方法执行前后做权限校验、日志等精细化控制。前者更底层通用,后者更贴近业务逻辑。不管过滤器还是拦截器,只要符合路径匹配的,都会走一遍流程
2
Day 37✅ 今天做了:1、扇贝英语单词打卡2、微信阅读15分钟3、英语听说读写4、编程导航学习⏰ 明天计划:待定📚 今日感悟:Keep going!
2
Day 1✅ 今天做了:学了最基本的DFS,完成了洛谷上相关的4道题⏰ 明天计划:继续刷DFS,并且复习二分📚 今日感悟:码途遥远,道阻且长……
1
Day 38✅ 今天做了:1、扇贝英语单词打卡2、微信阅读15分钟3、英语听说读写4、编程导航学习⏰ 明天计划:待定📚 今日感悟:Keep going!
1
Day 115✅ 今天做了:学习了jdbc⏰ 明天计划:继续学习mysql
0
