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チェックをするのが確実なんですけどね。。。
💡 補足:Integer/int から String への変換に関する実践的なポイント
Java では、数値を文字列に変換する方法として Integer.toString() や String.valueOf() に加えて、用途や状況に応じていくつかの選択肢があります。代表的な注意点・ベストプラクティスは以下の通りです:
-
基本的な変換
Integer.toString(int)とString.valueOf(int)はどちらも基本的な変換方法として広く使われ、結果は同じ文字列になります。内部的にはString.valueOf(int)がInteger.toString(int)を呼び出しているため、パフォーマンス差はほとんどありません。 -
nullの扱いIntegerオブジェクトを変換する場合、toString()は null 参照だとNullPointerExceptionが発生 します。一方、String.valueOf()はnullを"null"という文字列として扱うため、NPE を避けたいケースではこちらが有利です。 -
文字列連結 (
+) は注意
単純に"" + intのように書く方法もありますが、これは新しいStringBuilderを内部で生成するため、ループ内など頻繁に使う場面ではパフォーマンスに影響する可能性があります。 -
用途に応じた他の方法
文字列形式を整えたりフォーマットしたい場合は、String.format()やInteger.toString(int, radix)(基数指定)なども検討できます。
このように、単純な変換の用途からパフォーマンス・安全性まで考えると、状況に応じて使い分けることが大切です。
