StringBuidler.equals比较为true
来源:互联网 发布:中国联通是什么网络 编辑:程序博客网 时间:2024/05/17 06:50
问题:判断字符串是否为对称字符串?
代码实现:
public static boolean checkString(String s) { StringBuilderstr1 = new StringBuilder(s); StringBuilderstr2 = str1.reverse();//字符反转 return str1.equals(str2); }
发现字符串怎么比较都是true? 什么问题了?
开始研究问题:
查看StringBuilder的源码代码,发现 没有重写equals 方法,查看它的父类AbstractStringBuilder 有没有写这个方法,方法没有,就知道 str1调用了Object 方法
public boolean equals(Object obj) { return (this == obj); }
我们现在发现 str1.equals(str2)方法 没有问题:看下 reverse()方法:
StringBuilder调用了父类方法:
@Override public StringBuilder reverse() { super.reverse(); return this; }
AbstractStringBuilder的方法实现:
public AbstractStringBuilder reverse() { boolean hasSurrogates = false; int n = count - 1; for (int j = (n-1) >> 1; j >= 0; j--) { int k = n - j; char cj = value[j]; char ck = value[k]; value[j] = ck; value[k] = cj; if (Character.isSurrogate(cj) || Character.isSurrogate(ck)) { hasSurrogates = true; } } if (hasSurrogates) { reverseAllValidSurrogatePairs(); } return this; }
我们发现是 返回的this 还是str1 所以 方法结果是true
那我们怎么解决了,看下toString()就知道了
@Override public String toString() { // Create a copy, don't share the array return new String(value, 0, count); }
阅读全文
0 0
- StringBuidler.equals比较为true
- Java中“equals比较为true,那么hashcode就一定相等”这条真理探秘!
- 两个对象用equals方法比较为true,它们的Hashcode值相同吗?
- js中0跟空字符串比较为什么为true
- Interger声明的在-128 ~ 127之间值比较为true
- EL表达式比较字符串或是数字格式的数值是否相等,为true,却不执行为true时的代码
- equals比较与等值比较
- equals和 hashcode比较
- equals和 hashcode比较
- Equals比较对象
- 字符串比较:equals()方法
- equals和 hashcode比较
- 笔记,equals 的比较
- equals和 hashcode比较
- equals 与“=”比较
- hashcode()和equals()比较
- 字符串比较 equals
- Equals比较规范
- 人工智障学习笔记——机器学习(13)LLE降维
- makernet、yolo、ssd安装与训练教程(少走弯路)
- 实战微博互动预测之三_xgboost答疑解惑
- python-网络爬虫--简单框架
- 16秋计算机科学与技术鲁嘉华第七章
- StringBuidler.equals比较为true
- 产品经理不再纸上谈兵——产品经理请先别急着开发
- unity视图简介(下)
- 【Android 开发遇错】Listview 报错 java.lang.ClassCastException:
- 服务器虚拟主机,非根目录jsp文件的引包报错
- C#btn输入文件夹路径
- Duilib 源码分析之 Shortcut 篇
- linux 非root用户远程登录,密钥连接
- zkclient实现对zookeeper基本操作