Javaでの「String.valueOf()」メソッドと「toString()」違いについてまとめておきます。
ある程度Javaで開発経験のある方であれば数字型⇔文字列型のキャスト作業というのは頻繁に発生する作業の一つです。
「String.valueOf()」と「toString()」はどちらも数値型を文字列型へ変換してくれるメソッドですが、両者はどのような違いがあるのでしょうか?
結論から言ってしまうと「toString()」の方は変換する値がnullの場合にNullPointerExceptionで落ちます。
以下のソースを実行して見るとその違いが分かります。
サンプルJavaソース
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
/** * <p>[概 要] サンプル文字列変換</p> * <p>[詳 細] </p> * <p>[備 考] </p> */ public static void sampleStr1(){ Integer hoge1 = 123; Integer hoge2 = null; String str1 = String.valueOf(hoge1); System.out.println(str1); String str2 = String.valueOf(hoge2); System.out.println(str2); String str3 = hoge1.toString(); System.out.println(str3); String str4 = hoge2.toString(); System.out.println(str4); } |
このソースを実行すると19行目のtoString()メソッドを実行する箇所で「NullPointerException」が発生します。
このことを踏まえると以下の様に「String.valueOf()」と「toString()」を使い分ける必要があります。
NullPointerExceptionを発生させたくないからという理由だけでString.valueOf()を使用するという発送は辞めたほうが良いでしょう。
「String.valueOf()」を使用する場合
- 変換したい値がnullであってもNullPointerExceptionを発生させたくない時
「toString()」を使用する場合
- 変換したい値がnullであってはいけない時(何らかの値が設定されている事が仕様で前提になっているケースなど)
※toString()を使用する事でNullPointerExceptionが発生し、その異変に気付く事が出来ます。
まあ、変換前にnullチェックをするのが確実なんですけどね。。。