我遇到了解析字符串的问题;我似乎无法找出为什么我的String Array的值不等于它们应该是什么!这可能看起来很奇怪,所以这里是代码的简化版本(应用程序要大得多,所以我只做了一个小程序来解释我的观点)
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似乎没有注意到。有什么我做错了吗?
答案 0 :(得分:7)
您永远不应该使用==
运算符来比较Java中Strings
的内容。与Objects
Strings
一起使用时,==
运算符会比较引用的相等性。换句话说,如果两个引用都引用相同的对象,==
将只返回true
个对象。如果您有两个不同的 String
个对象,那么即使内容相同,==
也会返回false
。
使用String#equals
比较Strings
的内容。此方法将逐个字符地比较String
个对象的内容,以确定内容是否相同。
答案 1 :(得分:1)
您应该使用.equals
来比较字符串。
equals 方法检查字符串的实际内容,==
运算符检查两个对象是否引用相同的实例。
String.equals(String other)
请参阅:http://blogs.adobe.com/cantrell/archives/2003/04/how_equals_work.html
答案 2 :(得分:1)
在Java中,您必须使用equals
方法来比较两个字符串。例如,如果您想将String a
与String b
进行比较,则可以说if (a.equals(b))
。 ==
运算符检查两个字符串是否是对同一对象的引用。
答案 3 :(得分: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] + "'");
}
}
}
}