ブロックが優れている場合はどれですか?
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");
}
}
ブロックが優れている場合はどれですか?
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");
}
}
最初のアプローチでは、 にマージンを与えてい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
str.equals("exit")
比較を記述するより自然な方法だと思いますが、 NullPointerException
if str
is nullをスローします"exit".equals(str)
が、単純に false と評価されます。
str
ただし、null になる理由を知る必要があります。null 値は、プログラムの他の場所のバグやエラーによって引き起こされる可能性があります。たとえばnull
、無視するのではなく個別にチェックするか、事前に null でないことを確認することをお勧めします。
私が好む:
"exit".equals(str)
ただ避けるためにNullPointerException
。
以下を使用してケースをダックします。 NullPointerException
"exit".equals(str)