欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java三目运算符中使用trim()中“ “.trim()==““竟然是false;

程序员文章站 2024-01-27 11:55:34
...
这个问题我无语凝噎。
三目的运算原则我不用多说了。
来朋友们看下这段代码n的值是多少。
 int n = " ".trim()==""?1:0;

正常逻辑trim()将一个空格组成的字符串" ",去掉空格后等于""没问题吧,那么表达是相等为true,结果为1
但是,现实是结果为0;wtf;

java三目运算符中使用trim()中“ “.trim()==““竟然是false;最后看了trim();的源码终于发现点线索;trim();将字符串处理后返回的是一个新的对象;源码如下!(这是问题的根源之一)
java三目运算符中使用trim()中“ “.trim()==““竟然是false;
然后,我又试了一下equals去比较trim()处理前后的值发现是相同的;
java三目运算符中使用trim()中“ “.trim()==““竟然是false;
总结:
==比较的是咱栈内引用;equals比较的是堆内的值;再加上String类型是使用final修饰的类型;堆内值是不会变得;所以trim()处理后栈内的引用变成新对象的;
最后比较就成了false;equals比较就为true;所以比较字符串还是使用equas吧,用本身就有问题