-3

我在解析字符串时遇到问题;我似乎无法找出为什么我的字符串数组的值不等于它们应该的值!这可能看起来很奇怪,所以这里是代码的简化版本(应用程序要大得多,所以我只是做了一个小程序来解释我的观点)

public class Test {

public static void main(String[] args) {

    String src = "beep zap derp flop";
    String delims = "[ ]+";
    String[] tokens = src.split(delims);

    if (tokens[0] == "beep") {
        System.out.println("you said beep!");
    } else {

               for (int i = 0; i < tokens.length; i++) {
                    System.err.println("'" + tokens[i] + "'");
               }
          }
     }
}

我的输出是

'beep'
'zap'
'derp'
'flop'

我知道令牌 [0] 是哔哔声,但 Java 似乎没有注意到。有什么我做错了吗?

4

4 回答 4

7

你不应该使用==运算符来比较StringsJava 中的内容。当与Objectssuch一起使用时Strings==运算符会比较引用是否相等。换句话说,只有当两个引用都指向同一个对象时,==才会返回true对象。如果你有两个不同的 String对象,那么即使内容相同==也会返回。false

用于String#equals比较Strings. 此方法将String逐个字符比较对象的内容,以确定内容是否相同。

于 2013-03-21T00:23:44.797 回答
1

在 Java 中,您必须使用equals方法来比较两个字符串。例如,如果要与 比较String aString b可以说if (a.equals(b))==运算符检查两个字符串是否是对同一对象的引用。

于 2013-03-21T02:14:02.960 回答
1

您应该使用.equals比较字符串。

equals方法检查字符串的实际内容,==运算符检查两个对象是否引用同一个实例。

String.equals(String other)

看到这个:http: //blogs.adobe.com/cantrell/archives/2003/04/how_equals_work.html

于 2013-03-21T00:24:56.980 回答
0

公共类测试{

public static void main(String[] args)    {
String src = "beep zap derp flop";
String delims = "[ ]+";
String[] tokens = src.split(delims);

if ("beep".equals(tokens[0]))
{
    System.out.println("you said beep!");
} 
else
{

           for (int i = 0; i < tokens.length; i++) {
                System.err.println("'" + tokens[i] + "'");
           }
      }

}

}

于 2013-03-21T05:41:47.677 回答