java三目运算符中使用trim()中“ “.trim()==““竟然是false;
程序员文章站
2024-01-27 11:55:34
...
这个问题我无语凝噎。
三目的运算原则我不用多说了。
来朋友们看下这段代码n的值是多少。
int n = " ".trim()==""?1:0;
正常逻辑trim()
将一个空格组成的字符串" "
,去掉空格后等于""
没问题吧,那么表达是相等为true
,结果为1
;
但是,现实是结果为0
;wtf;
最后看了trim();
的源码终于发现点线索;trim();将字符串处理后返回的是一个新的对象;源码如下!(这是问题的根源之一)
然后,我又试了一下equals去比较trim()处理前后的值发现是相同的;
总结:==
比较的是咱栈内引用;equals
比较的是堆内的值;再加上String
类型是使用final
修饰的类型;堆内值是不会变得;所以trim()
处理后栈内的引用变成新对象的;
最后比较就成了false;equals比较就为true;所以比较字符串还是使用equas吧,用本身就有问题
下一篇: mysql中对表的操作教程