一种奇怪的方式写的方法,我的建议是正确的吗?

时间:2011-10-19 08:24:41

标签: java if-statement

我有一个方法是别人的程序,但我宁愿以更易读的方式编写它。我只需要检查一下我的建议是否正确。

当前写作:

if (userData instanceof String && ((String) userData).compareTo(name) == 0)

可能是:

if(.... && userData.equals(name))

由于

4 个答案:

答案 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)) {
    ....
}