如何比较两个string的值是相等的,什么是最好的方法?

总是对这个东西感到困惑。 任何人都可以帮忙

string1.equals(string2)就是这样。

如果string1等于string2的值,则返回true 。 否则,它将返回false

等于参考

string1.equals(string2)是正确的方法来做到这一点。

 String s = "something", t = "maybe something else"; if (s == t) // Legal, but usually results WRONG. if (s.equals(t)) // RIGHT way to check the two strings /* == will fail in following case:*/ String s1 = new String("abc"); String s2 = new String("abc"); if(s1==s2) //it will return false 

您可以使用==运算符或Object.equals(Object)方法。

==运算符检查两个主体是否是相同的对象,而equals方法检查相同的内容(长度和字符)。

 if(objectA == objectB) { // objects are the same instance. ie compare two memory addresses against each other. } if(objectA.equals(objectB)) { // objects have the same contents. ie compare all characters to each other } 

你select哪一个取决于你的逻辑 – 如果你可以的话,使用==,如果你不关心性能,就等于它,这是相当快的。

String.intern()如果你有两个string,你可以让它们internate,也就是让JVM创build一个string池,并返回与你的实例相同的实例(通过调用String.intern())。 这意味着如果你有两个string,你可以调用String.intern(),然后使用==运算符。 String.intern()是昂贵的,只能作为一个最优化 – 它只能支付多重比较。

所有的in-codestring已经是internate,所以如果你不创build新的string,你可以自由地使用==运算符。 一般来说,你是非常安全(和快速)

 if(objectA == objectB || objectA.equals(objectB)) { } 

如果你有两种情况的混合。 内联

 if(objectA == null ? objectB == null : objectA.equals(objectB)) { } 

也可以是相当有用的,它也处理空值,因为String.equals(..)检查为空。

你应该使用某种forms的String#equals(Object)方法。 然而,你应该怎么做还有一些微妙之处:

如果你有一个string文字,那么你应该像这样使用它:

 "Hello".equals(someString); 

这是因为string文字"Hello"永远不能为空,所以你永远不会遇到NullPointerException

如果你有一个string和另一个对象,那么你应该使用:

 myString.equals(myObject); 

你可以通过这样做确保你实际上获得了string的平等。 对于你所知道的, myObject可以是一个总是在equals方法中返回true的类!

从不太可能为null的对象开始,因为:

 String foo = null; String bar = "hello"; foo.equals(bar); 

会抛出一个NullPointerException ,但是这个:

 String foo = null; String bar = "hello"; bar.equals(foo); 

将不会。 String#equals(Object)参数为null时, String#equals(Object)将正确地处理这种情况,所以你只需要担心被解引用的对象 – 第一个对象。

==检查它们是否实际上是内存中的相同对象(有时令人困惑,因为它们可能都来自池),其中equals()java.lang.String覆盖以检查每个字符以确保真正的平等。 所以, equals()就是你想要的。

不要忘记

 .equalsIgnoreCase(String) 

如果你不担心这种事情…