我正在尝试创建自己的“int compareTo(String,String)
”方法。我想知道如果我发现任何字符串为null,我应该返回什么?抛出异常? return -1是compareTo ...
public int compare(String st1, String st2){
if (st1 == null) || st2 == null ) return ..
...
//logic
...
}
compareTo definition:
public int compareTo(String anotherString)
按字典顺序比较两个字符串。比较基于字符串中每个字符的Unicode值。此String对象表示的字符序列按字典顺序与参数字符串表示的字符序列进行比较。如果此String对象按字典顺序位于参数字符串之前,则结果为负整数。如果此String对象按字典顺序跟随参数字符串,则结果为正整数。如果字符串相等,结果为零; compareTo恰好在equals(Object)方法返回true时返回0。
http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#compareTo(java.lang.String)
答案 0 :(得分:1)
只要您尊重比较者的合同,由您决定。
你可以抛出一个NullPointerException
。这意味着您认为将null传递给比较器是一个错误。
您可以选择使null小于任何非空字符串。在这种情况下,compare(null, "nonNull")
必须返回一个负整数,compare("nonNull", null)
必须返回一个正整数,compare(null, null)
必须返回0.
或者您可以选择使null大于任何非空字符串。在这种情况下,compare(null, "nonNull")
必须返回正整数,compare("nonNull", null)
必须返回负整数,compare(null, null)
必须返回0.
如果任何参数为null,则返回-1违反合同:这意味着null既小又大于非空字符串,具体取决于参数的顺序。
答案 1 :(得分:0)
这里的JDK先例是抛出NullPointerException,这通常是一种合理的方法,因为空值通常表示可以快速失败的错误。
答案 2 :(得分:0)
最好的是遵循可比规范:
请注意,null不是任何类的实例,并且e.compareTo(null)应抛出NullPointerException,即使e.equals(null)返回false。