比较 KeyEvent .getText 和数组 javafx 中的索引时,if 语句 returns 输出错误

if statement returns wrong output when comparing KeyEvent .getText and index in array javafx

我正在尝试检查来自用户的输入(以按键的形式)是否与已分解为字符数组的字符串 textToType 相同。问题是即使它们 return 具有相同的值,当我比较它们时它仍然会给出输出 wrong letter.

输出

index splitter [0] returned: t
event.getText returned: t
wrong letter
@FXML
private void detectInputAreaKeyEvent(KeyEvent event) {
    char[] splitter = textToType.toCharArray();

    System.out.println("index splitter [0] returned: " + splitter[0]);
    System.out.println("event.getText returned: " + event.getText());

    if (event.getText().equals(splitter[0])) {
        System.out.println("right letter");
    }
    else {
        System.out.println("wrong letter");
    }

TLDR:您正在比较 Stringchar,因此它们不相等。


KeyEvent.getText()returns一个String,而splitter[0]是原始类型char.

因为 String.equals(...) 需要一个 Object,所以当你调用

event.getText().equals(splitter[0])

splitter[0] 自动装箱 到类型 Character 的包装器对象。因此,您将 StringCharacter 进行比较。 String.equals() documentation 状态

The result is true if and only if the argument is not null and is a String object ...

(我的重点)。由于您提供的是 Character 实例,而不是 String 实例,因此 equals() 的结果为 false。

您可以通过比较相同类型的事物来解决此问题:

if (event.getText().charAt(0) == splitter[0])

if (event.getText().equals(textToType.substring(0,1)))

(第一个可能稍微更有效率)。