【问题标题】:String comparison order in JavaJava中的字符串比较顺序
【发布时间】:2010-09-04 08:32:23
【问题描述】:

下面这两种String比较方法是否认为相等

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

还是应该优先选择一种比较方式?

【问题讨论】:

    标签: java string coding-style


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

        • 我的错,我应该在 const val 中添加 final
        【解决方案4】:

        当一个常量值与另一个值进行比较时,您几乎可以肯定没有空值。

        在你的情况下,

        new TestString().testString1(null);
        

        会抛出异常,而

        new TestString().testString2(null);
        

        不会。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-01-02
          • 1970-01-01
          • 1970-01-01
          • 2013-10-22
          • 2018-05-17
          • 1970-01-01
          • 2013-12-16
          相关资源
          最近更新 更多