3

ブロックが優れている場合はどれですか?

private static void checkStr(String str) {

    if (str.equals("exit")) {
        System.out.println("It is equal");
    }
    if ("exit".equals(str)) {
        System.out.println("It is equal");
    }
}
4

4 に答える 4

8

最初のアプローチでは、 にマージンを与えていNullPointerExceptionsます。したがって、私の観点からは、2番目の方が優れています。

定数の場合、常に最初のアプローチよりも 2 番目のアプローチを優先する必要があります。

"exit".equals(str)

ここで詳細な説明を見つけることができます


私は個人的に別のアプローチを好みます。Apache Commons - commons lang have ObjectUtils.equals(Object, Object). このアプローチでは、null値があっても常に安全です。

ドキュメントから:

2 つのオブジェクトが等しいかどうかを比較します。一方または両方のオブジェクトが null である可能性があります。

 ObjectUtils.equals(null, null)                  = true
 ObjectUtils.equals(null, "")                    = false
 ObjectUtils.equals("", null)                    = false
 ObjectUtils.equals("", "")                      = true
 ObjectUtils.equals(Boolean.TRUE, null)          = false
 ObjectUtils.equals(Boolean.TRUE, "true")        = false
 ObjectUtils.equals(Boolean.TRUE, Boolean.TRUE)  = true
 ObjectUtils.equals(Boolean.TRUE, Boolean.FALSE) = false
于 2012-07-28T10:47:28.037 に答える
2

str.equals("exit")比較を記述するより自然な方法だと思いますが、 NullPointerExceptionif stris nullをスローします"exit".equals(str)が、単純に false と評価されます。

strただし、null になる理由を知る必要があります。null 値は、プログラムの他の場所のバグやエラーによって引き起こされる可能性があります。たとえばnull、無視するのではなく個別にチェックするか、事前に null でないことを確認することをお勧めします。

于 2012-07-28T11:17:16.100 に答える
1

私が好む:

"exit".equals(str)

ただ避けるためにNullPointerException

于 2012-07-28T10:48:10.647 に答える
1

以下を使用してケースをダックします。 NullPointerException

"exit".equals(str)
于 2012-07-28T10:50:45.097 に答える