问题

我在程序中使用 == 运算符来比较我所有的字符串. 但是,我遇到了一个错误,将其中一个更改为 .equals(),并修复了错误.

== 坏吗?什么时候应该和它应该不使用?有什么区别?



解决方法

== 测试引用相等性(无论它们是否是相同的对象).

.equals()测试值相等(它们是否在逻辑上等于).

Objects.equals()在调用 .equals()之前检查null,所以你不必(从JDK7开始可用, ="https://github.com/google/guava/wiki/CommonObjectUtilitiesExplained#equals"rel ="noreferrer"> 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 

// ... but you should really just call Objects.equals()
Objects.equals("test", new String("test")) // --> true
Objects.equals(null, "test") // --> false

您几乎总是想使用 Objects.equals().在您知道罕见情况下,您正在处理 interned 字符串,您可以使用 == .




相关问题推荐