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

时间:2016-01-21 15:42:00

标签: java interface comparable compareto

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方法,但我没有收到错误消息。如果statemint中的条件给我一条消息,说它不能从int转换为boolean。我明白了,但问题是我正在使用netiher。我只是想比较两个简单的字符串,为什么会这样呢?

3 个答案:

答案 0 :(得分:7)

您应该注意的是界面" compareTo'正在返回一个int' public int compareTo'是标志

如果语句依赖于布尔值,则使用thisId.compareTo(personStr)将返回一个整数,就像您正在创建的方法一样。

你的第一个if语句很好 - '等于'返回一个布尔值。然而,第二个没有,它可能会返回-1,0或1。

答案 1 :(得分:2)

  

但问题是我正在使用netiher

你确定吗?

这会产生int

thisId.compareTo(personStr)

但您将其用作Boolean

if (yourResult)

if语句需要布尔值,它不能用于任何值。例如,考虑一下这个区别:

if (value == 1)

和此:

if (value)

在某些语言中,您可以侥幸逃脱。有些语言指定了真实度"对于所有类型,允许您在布尔表达式中使用它们。 Java不是其中之一。您必须在Java中显式定义布尔逻辑:

if(thisId.compareTo(personStr) > 0) // or whatever your logic should be

答案 2 :(得分:0)

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

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