Javaのequalsメソッドでnullまたは空文字を比較するサンプルです。
目次
値がnullのとき | nullをequalsメソッドで比較する |
nullをObjects.equals(a,b)で比較する | |
nullをStringUtilsクラスのequalsメソッドで比較する | |
nullか確認する方法 | |
値が空文字のとき | 空文字をequalsメソッドで比較する |
空文字をObjects.equals(a,b)で比較する |
nullをequalsメソッドで比較する
- a.equals(b)のとき、aがnullの場合は、NullPointerExceptionが発生します。
- a.equals(b)のとき、aがnullではなくbがnullの場合は、falseを返します。
- Java7で追加されたObjects.equals(a,b)は、a,bがnullでもNullPointerExceptionは発生しません。
nullをequalsメソッドで比較するサンプルです。
package test1;
public class Test1 {
public static void main(String[] args) {
String a = null;
String b = null;
String moji = "abc";
// 1. null.equals(文字列)の場合
try {
if (a.equals(moji)) {
System.out.println("true"); // 出力されない
}
} catch (NullPointerException e) {
System.out.println(e); // NullPointerExceptionが出力される
}
// 2. 文字列.equals(null)の場合
if (moji.equals(a)) {
} else {
System.out.println("false"); // falseが出力される
}
// 3. null.equals(null)の場合
try {
if (a.equals(b)) {
} else {
System.out.println("false"); // 出力されない
}
} catch (NullPointerException e) {
System.out.println(e); // NullPointerExceptionが出力される
}
}
}
11,26行目は、Nullポインタの例外が発生します。
19行目は、falseになります。
nullをObjects.equals(a,b)で比較する
public static boolean equals(Object a,Object b) |
- Java7で追加されたObjects.equals(a,b)の場合、比較する両方の値がnullでもNullポインタの例外は発生しません。
- 以下は、OracleのJava8のObjectsクラスのequalsのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/util/Objects.html#equals-java.lang.Object-java.lang.Object-
nullをObjects.equals(a,b)で比較するサンプルです。
package test1;
import java.util.Objects;
public class Test1 {
public static void main(String[] args) {
String a = null;
String b = null;
String moji = "abc";
// 1.equals(null, 文字列)の場合
if (Objects.equals(a, moji)) {
} else {
System.out.println("false"); // falseが出力される
}
// 2.equals(文字列,null)の場合
if (Objects.equals(moji, a)) {
} else {
System.out.println("false"); // falseが出力される
}
// 3.equals(null, null)の場合
if (Objects.equals(a, b)) {
System.out.println("true"); // trueが出力される
}
}
}
24行目は、両方の値ともnullですがtrueになります。
nullをStringUtilsクラスのequalsメソッドで比較する
public static boolean equals(CharSequence cs1,CharSequence cs2) |
- StringUtilsクラスは、Apache Commons Langのライブラリです。
- 比較するどちらの値がnullの場合でもNullPointerExceptionが発生しません。a.equals(b)との違いです。
- StringUtilsのライブラリは、以下のApache Commons Langのダウンロードページにあります。
http://commons.apache.org/proper/commons-lang/download_lang.cgi - 上記リンクからzipを取得して展開しjar(例:commons-lang3-3.9.jar)をビルドパスに追加してください。
Eclipse jarファイルをクラスパスに設定する方法
nullをStringUtilsクラスのequalsメソッドで比較するサンプルです。
package test1;
import org.apache.commons.lang3.StringUtils;
public class Test1 {
public static void main(String[] args) {
String a = null;
String b = null;
String moji = "abc";
// 1. equals(null, 文字列)の場合
if (StringUtils.equals(a,moji)) {
} else {
System.out.println("false"); // falseが出力される
}
// 2. equals(文字列,null)の場合
if (StringUtils.equals(moji,a)) {
} else {
System.out.println("false"); // falseが出力される
}
// 3. equals(null, null)の場合
if (StringUtils.equals(a,b)) {
System.out.println("true"); // trueが出力される
}
}
}
3行目は、StringUtilsをimportしています。
24行目は、両方の値ともnullですがtrueになります。
nullか確認する方法
nullかどうかは、==で確認できます。
package test1;
public class Test1 {
public static void main(String[] args) {
String a = null;
// nullかどうか==で確認
if (a == null) {
System.out.println("true"); // true
}
}
}
空文字をequalsメソッドで比較する
- 空文字("")もequalsメソッドで判定できます。
- a.equals(b)のときのa,bのいずれかまたはa,bの両方が空文字でも例外は発生しません。
- Java7で追加されたObjects.equals(a,b)は、a,bが空文字でも例外は発生しません。
空文字をequalsメソッドで比較するサンプルです。
package test1;
public class Test1 {
public static void main(String[] args) {
String a = "";
String b = "";
String moji = "abc";
// 1. 文字列.equals("")の場合
if (moji.equals(a)) {
} else {
System.out.println("false"); // falseが出力される
}
// 2. "".equals(文字列)の場合
if (a.equals(moji)) {
} else {
System.out.println("false"); // falseが出力される
}
// 3. "".equals("")の場合
if (a.equals(b)) {
System.out.println("true"); // trueが出力される
}
}
}
23行目は、両方の値とも空文字です。trueになります。
空文字をObjects.equals(a,b)で比較する
空文字をObjects.equals(a,b)で比較するサンプルです。
package test1;
import java.util.Objects;
public class Test1 {
public static void main(String[] args) {
String a = "";
String b = "";
String moji = "abc";
// 1.Objects.equals(文字列, "")の場合
if (Objects.equals(moji, a)) {
} else {
System.out.println("false"); // falseが出力される
}
// 2.Objects.equals("",文字列)の場合
if (Objects.equals(a, moji)) {
} else {
System.out.println("false"); // falseが出力される
}
// 3.Objects.equals("","")の場合
if (Objects.equals(a, b)) {
System.out.println("true"); // trueが出力される
}
}
}
25行目は、両方の値とも空文字です。trueになります。
関連の記事