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