本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看活动链接
如何比较Java中的字符串?
==到目前为止,我一直在程序中使用运算符比较所有字符串。但是,我遇到了一个错误,.equals()而是将其中一个更改为错误,并修复了该错误。
是==坏?什么时候应该使用它,不应该使用它?有什么不同?
高分回答:
== 测试引用是否相等(它们是否是同一对象)。
.equals() 测试值是否相等(在逻辑上是否为“相等”)。
Objects.equals()null在调用之前进行检查,.equals()因此您不必(在JDK7起可用,在Guava中也可用)。
因此,如果要测试两个字符串是否具有相同的值,则可能要使用Objects.equals()。
// These two have the same value
new String("test").equals("test") // --> true
// ... but they are not the same object
new String("test") == "test" // --> false
// ... neither are these
new String("test") == new String("test") // --> false
// ... but these are because literals are interned by
// the compiler and thus refer to the same object
"test" == "test" // --> true
// ... string literals are concatenated by the compiler
// and the results are interned.
"test" == "te" + "st" // --> true
// ... but you should really just call 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起。字符串文字:
而且,字符串文字总是引用class的相同实例String。这是因为使用方法将字符串文字(或更广泛地说,是常量表达式的值的字符串(第15.28节))“插入”以便共享唯一的实例String.intern。
在JLS 3.10.5-1中也可以找到类似的示例。 其他要考虑的方法
忽略大小写的String.equalsIgnoreCase()值相等。但是请注意,此方法在与语言环境有关的各种情况下可能会产生意想不到的结果,请参阅此问题。
String.contentEquals()将的内容String与任何内容进行比较CharSequence(从Java 1.5开始可用)。使您不必在进行相等比较之前将StringBuffer等转换为String,但将null检查留给了您。
文章翻译自kgs4h5t57thfb6iyuz6dqtun5y-ac4c6men2g7xr2a-stackoverflow-com.translate.goog/questions/5…
作者建议:字符串是一个对象,因此需要Objects.equals(),并且封装箱的Integer也是需要使用equals来进行比较的,Integer只是缓存了-128 ~ 128的缓存,操作就会使用另一个对象了
真心感谢帅逼靓女们能看到这里,如果这个文章写得还不错,觉得有点东西的话
求点赞👍 求关注❤️ 求分享👥 对8块腹肌的我来说真的 非常有用!!!
如果本篇博客有任何错误,请批评指教,不胜感激 !❤️❤️❤️❤️