当たり前のように、文字列のnullチェックではorg.apache.commons.lang.StringUtils.isEmpty()
を使っていますが、実は、java.lang.String.isEmpty()
もあります。
では、どうして外部jarを組み込んでまでorg.apache.commons.lang.StringUtils.isEmpty()
を使うのでしょうか?
※ここから先、この記事の中では、StringUtilsとはorg.apache.commons.lang.StringUtils
を指すことにします。
2つのisEmpty()の違い
StringUtilsのisEmpty()
nullか空文字の場合にtrueを返す。
StringのisEmpty()
length()が0の場合のみtrueを返す。
StringとStringUtilsのisEmpty()の実行結果比較
nullと空文字に対して、実際にisEmpty()メソッドを使ってみたソースがこちら
import org.apache.commons.lang.StringUtils;
public class VsIsEmpty {
public static void main(String[] args) {
String str1 = null;
String str2 = "";
System.out.println("-------------------------");
// System.out.println(str1.isEmpty()); //ここでnullPointerExceptionが発生してしまう。
System.out.println(StringUtils.isEmpty(str1));
System.out.println("-------------------------");
System.out.println(str2.isEmpty());
System.out.println(StringUtils.isEmpty(str2));
}
}
実行結果はこちら
-------------------------
true
-------------------------
true
true
「length()が0のとき」というだけあって、String.isEmpty()はNullPointerExceptinを返してきます。
そのため、上記ソースコードではコメントアウトしています。
結論
String.isEmpty()は「空かどうか」を判定する子だった
nullと空は別モノなので、言われてみるとそうなんですが、でもやっぱりemptyというとnullも空もtrueで返してほしい気分になります。