2011-10-19 21 views

回答

3

是。 compareTo返回0equals返回true


Comparable.compareTo的API:

返回:

...負整數,,或作爲該對象的正整數是小於,等於,或大於指定的對象。 ...

String.compareTo API文檔:

返回:

值0,如果該參數是一個字符串按字典等於這個字符串...

1

直接從java文檔取得:

如果字符串相等,結果爲零;當equals(Object)方法返回true時,compareTo返回0。

1

你甚至可以進一步簡化。如果你確信name是一個字符串,您可以將其全部簡化爲:

name.equals(userData) 

您必須檢查無效的name,雖然。在原始代碼無效性檢查中,考慮到userData上的instanceof表達式。

name != null && name.equals(userData) 

String.equals()已經檢查instanceof String

public boolean equals(Object anObject) { 
if (this == anObject) { 
    return true; 
} 
if (anObject instanceof String) { 
    String anotherString = (String)anObject; 
    int n = count; 
    if (n == anotherString.count) { 
    char v1[] = value; 
    char v2[] = anotherString.value; 
    int i = offset; 
    int j = anotherString.offset; 
    while (n-- != 0) { 
     if (v1[i++] != v2[j++]) 
     return false; 
    } 
    return true; 
    } 
} 
return false; 
} 
+0

好點,但如果'name == null'它會拋出異常。 – dacwe

+0

@dacwe是的。儘管如此,OP也沒有檢查null。 –

+3

嗯,如果'userData'爲'null','instanceof String'返回'false',如果'name'爲'null',則不等於'userData'。 – dacwe

0

是的。 instanceof然後有效地只防止userData的空值。如果你知道其中一個是非空的,你可以進一步簡化爲:

if (non_null_string.equals(possibly_null_string)) { 
    .... 
} 
相關問題