java:当其中一个字符串参数为 null 时,我应该 return 什么值。"int compareTo(String,String)"

java: what value should I return when one of the String arguments is null."int compareTo(String,String)"

我正在尝试创建自己的“int compareTo(String,String)”方法。我想知道如果发现任何字符串为空,我应该 return 怎么办?抛出异常? return -1 是 compareTo...

的可能结果
public int compare(String st1, String st2){
    if (st1 == null) || st2 == null ) return ..
    ...
    //logic
    ...
}

比较定义:

public int compareTo(String anotherString)

按字典顺序比较两个字符串。比较基于字符串中每个字符的 Unicode 值。此 String 对象表示的字符序列按字典顺序与参数字符串表示的字符序列进行比较。如果此 String 对象在字典顺序上位于参数字符串之前,则结果为负整数。如果此 String 对象按字典顺序跟随参数字符串,则结果为正整数。如果字符串相等,则结果为零;否则compareTo returns 0 恰好在 equals(Object) 方法 return 为真时。

http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#compareTo(java.lang.String)

由你来决定,只要尊重Comparator的约定即可。

你可以抛出一个NullPointerException。这意味着您认为将 null 传递给比较器是一个错误。

您可以选择使 null 小于任何非 null 字符串。在这种情况下,compare(null, "nonNull") 必须 return 一个负整数,compare("nonNull", null) 必须 return 一个正整数,并且 compare(null, null) 必须 return 0.

或者您可以选择使 null 大于任何非 null 字符串。在这种情况下,compare(null, "nonNull") 必须 return 一个正整数,compare("nonNull", null) 必须 return 一个负整数,compare(null, null) 必须 return 0.

如果任何参数为 null 则返回 -1 是违反约定的:这意味着 null 既小于又大于非空字符串,具体取决于参数的顺序。

这里的 JDK 先例是抛出 NullPointerException,这通常是一种合理的方法,因为 null 通常表示错误,因此可以快速失败。

最好遵循 Comparable 规范:

Note that null is not an instance of any class, and e.compareTo(null) should throw a NullPointerException even though e.equals(null) returns false.

http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.htmlhttp://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html