String.valueOf() と toString() で型変換の違いについて

Java

どっちの方法使って文字列型に変換すれば良いか分からなかったので違いをメモ。
結論から言うと、「null」値の扱いが違うようだった。

String.valueOf() は 変換する値が null であった場合は、文字列の”null”を返すが、toString() で型変換した場合は、java.lang.NullPointerException が発生する。

Object object = null;
String.valueOf(object);
System.out.println(String.valueOf(object));
// 出力
null
System.out.println(object.toString());
// エラー
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "Object.toString()" because "object" is null
スレッド "main" での例外 java.lang.NullPointerException: object "がNullなので "Object.toString() "を呼び出すことができない

公式で valueOf() の戻り値の説明を見ると、null に等しい文字列が返ってくるとあるし、valueOf() の中身を見ても、渡された値が null であった場合、”null” の文字列が返って来ることが確認された。

戻り値:
引数がnullの場合は"null"に等しい文字列。それ以外の場合はobj.toString()の値が返される。

参考サイト:https://docs.oracle.com/javase/jp/8/docs/api/java/lang/String.html#valueOf-java.lang.Object-
    public static String valueOf(Object obj) {
        return (obj == null) ? "null" : obj.toString();
    }

valueOf() と toString() の使い分けは、変換する値が null であった場合に分かれそうだ。

変換した値で null であってはいけない場合には toString() を使うのが良さそうで、NullPointerException を発生させたくなければ valueOf() を使うのでも良さそうだ。

null って基本許容されない値だと思ってるから、個人的には toString() で早期リターンさせてしまうのが良さそうな気がしてるが。

コメント

タイトルとURLをコピーしました