我有一个方法是别人的程序,但我宁愿以更易读的方式编写它。我只需要检查一下我的建议是否正确。
当前写作:
if (userData instanceof String && ((String) userData).compareTo(name) == 0)
可能是:
if(.... && userData.equals(name))
由于
答案 0 :(得分:3)
是。当compareTo
返回0
时,equals
会返回true
。
来自Comparable.compareTo
的api:
<强>返回:强>
...负整数, 零 ,或正整数,因为此对象小于 等于 < / strong>,或大于指定的对象。 ...
来自String.compareTo
api文档:
<强>返回:强>
如果参数是一个按字典顺序等于该字符串的字符串,则值为0 ...
答案 1 :(得分:1)
直接从java doc:
如果字符串相等,结果为零; compareTo恰好在equals(Object)方法返回true时返回0。
答案 2 :(得分:1)
你甚至可以进一步简化这一点。如果您确定name
是一个字符串,则可以将其全部缩减为:
name.equals(userData)
但是,您必须检查name
上的无效。在原始代码中,无效检查是基于instanceof
上的userData
表达式。
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;
}
答案 3 :(得分:0)
是。然后,instanceof实际上只保护userData的null值。如果您知道其中一个是非null,则可以进一步简化为:
if (non_null_string.equals(possibly_null_string)) {
....
}