【发布时间】:2020-10-30 09:51:02
【问题描述】:
这段代码将一个字符串分成tokens并将它们存储在一个字符串数组中,然后将一个变量与第一个home进行比较......为什么它不起作用?
public static void main(String...aArguments) throws IOException {
String usuario = "Jorman";
String password = "14988611";
String strDatos = "Jorman 14988611";
StringTokenizer tokens = new StringTokenizer(strDatos, " ");
int nDatos = tokens.countTokens();
String[] datos = new String[nDatos];
int i = 0;
while (tokens.hasMoreTokens()) {
String str = tokens.nextToken();
datos[i] = str;
i++;
}
//System.out.println (usuario);
if ((datos[0] == usuario)) {
System.out.println("WORKING");
}
}
【问题讨论】:
-
"==" 比较参考而不是内容。将 datos[0] == usuario 更改为 datos[0].equals(usuario) 以获得正确答案
-
我看到你改变了你接受的答案 - 我敦促你阅读我的 cmets 并重新考虑。现在接受的答案中的“故事”最初可能看起来不错,但恕我直言,它确实经不起推敲。
-
This article 可以帮助您理解这一点。
-
大多数语言都以这种方式工作,您只是看不到它,因为大多数语言都有运算符重载,并且字符串的 == 运算符已重载以调用与 string.equals 等效的语言。 Java 没有运算符重载,因此您必须像穴居人一样艰难地进行操作。当以这种方式比较字符串时,Java 也不会抱怨或警告您,因此它会成为您要查找的运行时错误。为什么Java没有运算符重载?因为他们想保持语言简单,然后他们意识到它太简单了,使得处理日期变得复杂。