做面料要建议网站,现在做一个网站最少要多少钱,手机网站跳转代码,上海网站建设咨询站霸网络问题#xff1a;在Java 里面怎么比较字符串
到目前为止#xff0c;我使用 操作符去比较字符串在我的程序里面。然而#xff0c;却产生了一个bug#xff0c;将这个改为了.equals()以后#xff0c;就把bug修复了
是不是太辣鸡了#xff1f;它什么时候应该被使用或者说是不…问题在Java 里面怎么比较字符串
到目前为止我使用 操作符去比较字符串在我的程序里面。然而却产生了一个bug将这个改为了.equals()以后就把bug修复了
是不是太辣鸡了它什么时候应该被使用或者说是不是不应该再用了。它们之间的差别是什么
回答一
判断的是引用是不是相等就是它们是不是同一个对象
.equals()判断的是它们的值是不是相等的就是它们逻辑上是不是等价的
Objects.equals()在调用calling .equals() 前先检查对象是不是为空所以这些检查你是不需要做的。在JDK7以后和Guava里面也是可以这样用的
因此如果你需要判断两个字符串是否有相同的值你可以使用Objects.equals()方法
// 它们两个的值是否相等
new String(test).equals(test) // -- true // 但是它们不是同一个对象
new String(test) test // -- false //
new String(test) new String(test) // -- false // 但是因为这些字面常量是被编译器放在常量池内部的因此是同一个对象
test test // -- true // 字符串字面常量被编译器连接起来了因此这个字符串也是被内置在常量池里的
test te st // -- true//但是你更应该直接调用Objects.equals方法
Objects.equals(test, new String(test)) // -- true
Objects.equals(null, test) // -- false
Objects.equals(null, null) // -- true你几乎都是会用Objects.equals()。但是在极少数的情况下你知道你在处理的是常量池里面的字符串的你就可以用
从JLS 3.10.5.起string字面常量
此外一个string字面常量总是引用相同的string类的实例的。这是因为string字面常量或者更通常来说应该是作为常量表达式值的字符串 通过使用String.intern方法内置在了常量池中为了去共享一个唯一的实例
相似的例子可以在JLS 3.10.5-1里面找到 文章翻译自Stack Overflowhttps://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java
相关文章: