调用equals方法这两个appraoch之间的区别?

Joh*_*ohn 2 java

方法之一.

if (graphType.equals("All") || graphType.equals("ALL"))
Run Code Online (Sandbox Code Playgroud)

四个人.

if ("All".equals(graphType) || "ALL".equals(graphType))
Run Code Online (Sandbox Code Playgroud)

这两种方法有什么区别?为什么下面的一个更好?

Rom*_*las 10

第二个更好,就像graphTypenull,第一个代码片段将抛出一个NullPointerException.

请注意,您可以使用简化代码"ALL".equalsIgnoreCase(graphType)(如果您接受诸如AlLaLL......之类的值)

编辑您的评论:

如果graphTypenull,在第一种情况下,你会得到一个NullPointerException.在第二种情况下,所述的评价equals方法将是false,作为"someString".equals(null);总是返回false:

这是String.equals(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;
}
Run Code Online (Sandbox Code Playgroud)

(来源)

有趣的是if (anObject instanceof String) {.在对象instanceof上调用语句时null,此测试始终返回false.这就是为什么"anyString".equals(null);会回归false.

  • 它读起来像一个Yoda条件,但是应该明确处理null. (2认同)
  • @Hamish:尤达的情况,错了是什么? (2认同)