我有一個方法是別人的程序,但我寧願寫一個更可讀的方式。我只需要檢查我的建議是否正確。以怪異的方式編寫的方法,我的建議是否正確?
當前寫成:
if (userData instanceof String && ((String) userData).compareTo(name) == 0)
可能是:
if(.... && userData.equals(name))
感謝
我有一個方法是別人的程序,但我寧願寫一個更可讀的方式。我只需要檢查我的建議是否正確。以怪異的方式編寫的方法,我的建議是否正確?
當前寫成:
if (userData instanceof String && ((String) userData).compareTo(name) == 0)
可能是:
if(.... && userData.equals(name))
感謝
是。 compareTo
返回0
當equals
返回true
。
從Comparable.compareTo
的API:
返回:
...負整數,零,或作爲該對象的正整數是小於,等於,或大於指定的對象。 ...
從String.compareTo
API文檔:
返回:
值0,如果該參數是一個字符串按字典等於這個字符串...
直接從java文檔取得:
如果字符串相等,結果爲零;當equals(Object)方法返回true時,compareTo返回0。
你甚至可以進一步簡化。如果你確信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;
}
是的。 instanceof然後有效地只防止userData的空值。如果你知道其中一個是非空的,你可以進一步簡化爲:
if (non_null_string.equals(possibly_null_string)) {
....
}
你測試了它們嗎? –
是的,你是正確的 – gtiwari333