算法日记(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 23✅ 今天做了:1、扇贝英语单词打卡2、英语听说读写、听力练习3、微信阅读15分钟4、编程导航学习⏰ 明天计划:待定📚 今日感悟:Keep going!
2
day1:补上之前的进度,学习了rag知识库的基础,并且代码本地实现了md文档的解析。
0
Day 18✅ 今天做了:AI面试120,复习前几天的rag和工具调用⏰ 明天计划:MCP📚 今日感悟:明天就八月了,继续加油
0
Day 24✅ 今天做了:1、扇贝英语单词打卡2、英语听说读写、听力练习3、微信阅读15分钟4、编程导航学习⏰ 明天计划:待定📚 今日感悟:Keep going!
1
Day 103✅ 今天做了:复习了多用户通信系统⏰ 明天计划:学习Java反射
0
