以下两种字符串比较方法是否相等
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);
}
}
或者是否应该优先考虑一种比较?
答案 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.