Java 字符串比较错误结果

Java String comparison wrong outcome

我正在尝试根据 EditTexts 是否实际更改来获取 enable/disable 的保存按钮,但我的字符串比较根本不起作用。

public void afterTextChanged(Editable editable) {
    String newSet = editable.toString();

    newSet = newSet.trim();
    if(!newSet.equals(ip) || !newSet.equals(port) || !newSet.equals(username) || !newSet.equals(password)){
        saveButton.setEnabled(true);
    }else{
        saveButton.setEnabled(false);
    }
}

它一直告诉我字符串不同,尽管它们并不相同。即使打印出来,我也会得到完全相同的字符串。

谁能帮帮我?

谢谢

newSet 不能等于所有这四个字符串,除非所有 4 个都相等。因此,条件很可能 return 为假。

如果您要求 newSet 等于这 4 个字符串中的任何一个,则正确的条件是:

if(!(newSet.equals(ip) || newSet.equals(port) || newSet.equals(username) || newSet.equals(password)))

可能你想要 && 而不是 ||:

public void afterTextChanged(Editable editable) {
  String newSet = editable.toString().trim();

  saveButton.setEnabled(!newSet.equals(ip) && 
                        !newSet.equals(port) && 
                        !newSet.equals(username) && 
                        !newSet.equals(password)); 
}

启用saveButton 如果newSet 不是 ip、端口、用户名或密码

你应该这样写,这样更容易阅读:

if (!Arrays.asList(ip, port, username, password).contains(newSet))
{
    saveButton.setEnabled(true);
}
else
{
    saveButton.setEnabled(false);
}

或:

saveButton.setEnabled(!Arrays.asList(ip, port, username, password).contains(newSet));

||替换为&&

if(!newSet.equals(ip) && !newSet.equals(port) && !newSet.equals(username) && !newSet.equals(password))

原因:

OR(||) 如果满足任何条件,它将进入循环。
AND(&&) 如果所有 条件都满足然后才进入循环。

在您的情况下,您需要满足所有条件,这就是使用 and 运算符而不是 or 运算符的原因。