Java中的字符串比较顺序

时间:2010-09-04 08:32:24

标签: java string coding-style

以下两种字符串比较方法是否相等

public class TestString {
    public static final String CONSTVAL="foo";

    public boolean testString1(String testVal) {
        return testVal.equalsIgnoreCase(CONSTVAL);
    }

    public boolean testString2(String testVal) {
        return CONSTVAL.equalsIgnoreCase(testVal);
    }
}

或者是否应该优先考虑一种比较?

4 个答案:

答案 0 :(得分:18)

你应该在常量上调用equals,因为当testVal为空时,它可以避免NullPointerException的风险。

public boolean testString2(String testVal) {
    return CONSTVAL.equalsIgnoreCase(testVal);
}

答案 1 :(得分:5)

后者的一个优点是,如果testVal为空,它不会抛出异常。

我希望结果是相同的,除此之外。

答案 2 :(得分:2)

乍一看我会同意@Jon Skeet,但后来我注意到 CONSTVAL不是最终的

如果它是final,那么testString2()是测试相等性的最安全和最好的方法。

答案 3 :(得分:0)

当一个常数值与另一个值进行比较时,你几乎肯定不会有空值。

在你的情况下,

new TestString().testString1(null);

将抛出异常,而

new TestString().testString2(null);

不会

但是这种表示法可以被视为a yoda condition.