String.equals vs. ==

2022-08-31 04:17:25

此代码将字符串分隔为标记,并将它们存储在字符串数组中,然后将变量与第一个主...为什么它不起作用?

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");
    }
}

答案 1

使用 string.equals(Object other) 函数来比较字符串,而不是运算符。==

该函数检查字符串的实际内容,运算符检查对对象的引用是否相等。请注意,字符串常量通常是“暂存”的,以便实际上可以比较两个具有相同值的常量,但最好不要依赖它。====

if (usuario.equals(datos[0])) {
    ...
}

注意:比较是在“usuario”上完成的,因为在代码中保证非空值,尽管您仍然应该检查数组中是否确实有一些令牌,否则您将获得数组越界异常。datos


答案 2

认识乔曼

乔曼是一位成功的商人,有2栋房子。

enter image description here

但其他人不知道。

是同一个乔曼吗?

当你问麦迪逊或伯克街的邻居时,这是他们唯一能说的话:

enter image description here

仅凭该住所,很难确认它是同一个Jorman。由于它们是2个不同的地址,因此很自然地假设它们是2个不同的人。

这就是运算符 == 的行为方式。所以它会说这是错误的,因为它只比较地址datos[0]==usuario

救援调查员

如果我们派出一名调查员呢?我们知道这是同一个Jorman,但我们需要证明这一点。我们的侦探将仔细观察所有物理方面。通过彻底的调查,代理商将能够得出结论是否是同一个人。让我们看看它以Java术语发生。

以下是 String 方法的源代码:equals()

enter image description here

它逐个字符地比较字符串,以便得出它们确实相等的结论。

这就是 String equals 方法的行为方式。因此将返回 true,因为它执行逻辑比较datos[0].equals(usuario)