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。我只是想比较两个简单的字符串,为什么会这样呢?
答案 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);
}