如何比较两个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)
如果你不担心这种事情…