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

Java 用一种奇怪的方式写的方法,我的建议正确吗?,java,if-statement,Java,If Statement,我有一个方法是别人的程序,但我更愿意以更可读的方式编写它。我只需要检查一下我的建议是否正确 当前记录为: if (userData instanceof String && ((String) userData).compareTo(name) == 0) 可以是: if(.... && userData.equals(name)) 谢谢是的compareTo返回0返回true 从api: 返回: 。。。负整数,零,或正整数,因为此对象小于、等于,或大于指定

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

当前记录为:

if (userData instanceof String && ((String) userData).compareTo(name) == 0)
可以是:

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

谢谢

是的<当
等于时,code>compareTo
返回
0
返回
true


从api:

返回:

。。。负整数,,或正整数,因为此对象小于、等于,或大于指定对象

从api文档中:

返回:

如果参数是一个按字典顺序与此字符串相等的字符串,则值为0


对<当
等于时,code>compareTo
返回
0
返回
true


从api:

返回:

。。。负整数,,或正整数,因为此对象小于、等于,或大于指定对象

从api文档中:

返回:

如果参数是一个按字典顺序与此字符串相等的字符串,则值为0


直接从java文档中获取:

如果字符串相等,则结果为零;当equals(Object)方法将返回true时,compareTo将返回0


直接从java文档中获取:

如果字符串相等,则结果为零;当equals(Object)方法将返回true时,compareTo将返回0


你甚至可以进一步简化。如果您确定
name
是一个字符串,则可以将其全部简化为:

name.equals(userData)
不过,您必须检查
name
上的空值。在原始代码中,空性检查是由于
userData
上的
instanceof
表达式

name != null && name.equals(userData)
String.equals()
已在检查字符串的
实例

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;
}

你甚至可以进一步简化。如果您确定
name
是一个字符串,则可以将其全部简化为:

name.equals(userData)
不过,您必须检查
name
上的空值。在原始代码中,空性检查是由于
userData
上的
instanceof
表达式

name != null && name.equals(userData)
String.equals()
已在检查字符串的
实例

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的空值。如果您知道其中一个为非null,则可以进一步简化为:

if (non_null_string.equals(possibly_null_string)) {
    ....
}

对。然后instanceof有效地只保护userData的空值。如果您知道其中一个为非null,则可以进一步简化为:

if (non_null_string.equals(possibly_null_string)) {
    ....
}

很好,但是如果
name==null
它将抛出一个异常。@dacwe是的。不过,OP也没有检查
null
s。如果
userData
is
null
字符串的
实例返回
false
,如果
name
null
则它不等于
userData
@dacwe大点。谢谢你把这个细节讲出来。我不知道
stringx=null;字符串的x实例
无法满足。我已经更新了答案来说明这一点。很好,但是如果
name==null
它将抛出一个异常。@dacwe是的。不过,OP也没有检查
null
s。如果
userData
is
null
字符串的
实例返回
false
,如果
name
null
则它不等于
userData
@dacwe大点。谢谢你把这个细节讲出来。我不知道
stringx=null;字符串的x实例
无法满足。我已经更新了答案来说明这一点。