##[Java]Object型のnullをString型に変換
Object型で取得した値をString型に変換する必要があって
toString()、String.valueOf()、キャスト変換などなど
変換する方法はいくつかあるけど違いあるのかな?となり、
そして一番気になったのは取得したObject型の値がnullの場合、
エラー起きちゃったりしないかなーって思って調べてみた。
先に結果を先に載せると…
#####【Object型のnullをtoString(),String.valueOf(),キャスト変換で変換】
toString() | String.valueOf() | キャスト変換 |
---|---|---|
NullPointerException | 文字列"null" | null |
下記プログラムで確認してみると、
test.java
public static void main(String[] args) {
Object testNull = null; // Object型null作成
String testNullString1 = testNull.toString(); // toString()による変換
String testNullString2 = String.valueOf(testNull); // String.valueOf()による変換
String testNullString3 = (String) testNull; // キャスト変換
// 各変換した値をMapに格納
LinkedHashMap<String,String> map= new LinkedHashMap<>();
map.put("toString()",testNullString1);
map.put("String.valueOf()",testNullString2);
map.put("キャスト変換",testNullString3);
// 各変換結果を出力
for(Map.Entry<String, String> mapString : map.entrySet() ) {
if(mapString.getValue() == null) {
System.out.println(mapString.getKey() +" で変換すると null になる。");
}else if(mapString.getValue().equals("null")) {
System.out.println(mapString.getKey() +" で変換すると 文字列の\"null\" になる。");
}else {
System.out.println(mapString.getKey() +" で変換すると その他の何か になる。");
}
}
}
実行結果1
Exception in thread "main" java.lang.NullPointerException
at Test_CastNull.main(Test_CastNull.java:11)
toString()変換で"NullPointerException"発生。toString()は使わないのが無難のよう。
そして、上記テストコードのtoString()のとこをコメントアウトして改めて実行。
実行結果2
String.valueOf() で変換すると 文字列の"null" になる。
キャスト変換 で変換すると null になる。
となり、当たり前ながらnull(になりえるやつ)の扱いには注意が必要ですね。