Java CompareTo 方法声明我无法将 int 转换为 boolean,即使两者都没有使用

Java CompareTo method states I cannot convert int to boolean even though neither is used

public int compareTo(Person p) {
    int res = 1;
    String personStr = p.getId();
    String thisId = this.getId();

    if(thisId.equals(personStr)){
        res = 0;
    }
    else if(thisId.compareTo(personStr)){
        res = -1;
    }

    return res;
}

我实现了一个非常简单的 compareTo 方法,但我没有收到错误消息。 else if statemint 中的条件给我一条消息,说它不能从 int 转换为 boolean。我明白了,但问题是我正在使用 netiher。我只想比较2个简单的字符串,为什么会这样?

你应该注意到接口 'compareTo' 是 returning 一个 int 'public int compareTo' 作为符号

if 语句依赖于布尔值,但是您使用 thisId.compareTo(personStr) 它将 return 一个整数,就像您正在创建的方法一样。

您的第一个 if 语句没问题 - 'equals' return 是一个布尔值。但是第二个没有,它可能 return -1、0 或 1。

but the thing is that I'm using netiher

你确定吗?

这导致 int:

thisId.compareTo(personStr)

但您将其用作 Boolean:

if (yourResult)

if 语句需要一个布尔值,它不能只用于任何值。例如,考虑这两者之间的区别:

if (value == 1)

还有这个:

if (value)

在某些语言中,您可以避免这种情况。某些语言将 "truthiness" 的度数分配给所有类型,允许您在布尔表达式中使用它们。 Java 不是其中之一。您必须在 Java:

中明确定义您的布尔逻辑
if(thisId.compareTo(personStr) > 0) // or whatever your logic should be

如果您只想比较这两个字符串,为什么不使用

public int compareTo(Person p) {
  String personStr = p.getId();
  String thisId = this.getId();
  return thisId.compareTo(personStr);
}