はじめに
結論から言うと、valueOfは文字列やプリミティブ値を、目的のラッパークラス、列挙型、独自クラスへそろえるための変換入口です。そのため、入力値を計算・比較・保存へ回す前に型を整える使い方を押さえると、Javaの変換処理を読みやすく整理できます。
Javaでは、int、double、boolean、charのような値を扱う一方で、コレクションやAPIの返り値ではInteger、Double、Boolean、Characterなどのオブジェクト型が必要になる場面があります。このとき、valueOfメソッドを使うと、型変換の意図がコード上に残りますし、ここがポイントです。
- Java SE 21 / JDK 21
- コンパイル例は標準ライブラリのみを使用
公式ドキュメントによれば、IntegerクラスにはvalueOf(int)、valueOf(String)、valueOf(String,int)が用意されています。一方、列挙型の変換はEnumクラスの仕様と、各列挙型に暗黙的に追加されるvalueOf(String)の動きが関係します。
- valueOfメソッドの役割とparse系メソッドとの違い
- 整数、浮動小数点、真偽値、文字を変換する使い方
- enumや独自クラスに広げる応用例
- null、範囲外、書式不正に関する注意点
- 戻り値や引数を調整するカスタマイズの考え方
関連する基礎として、コレクションに格納する型を確認したい場合はJava List型完全ガイドが参考になるのが基本です。その理解があると、複数の値をList<String>へそろえるサンプルコードの意図も追いやすくなります。
valueOfメソッドとは
基本的な概要
valueOfメソッドは、主にラッパークラスや列挙型で使われるstaticメソッドです。Integer.valueOf("123")のように呼び出すと、文字列を数値オブジェクトへ変換し、計算や比較に使える形へ整えます。
これに対してString.valueOf()は、数値や真偽値、オブジェクトを文字列へ変える入口として使われますが、これは押さえたい点です。そのため、同じ名前でも戻り値の型はクラスごとに異なり、呼び出し元のクラス名を読んで判断するのが基本になります。
一般に、ラッパークラスのvalueOfはnew Integer()のようなコンストラクタ呼び出しより現行の書き方に合います。Integerのコンストラクタは非推奨のため、新しいコードではInteger.valueOf()やオートボクシングを選ぶほうが自然です。
使用目的と利点
valueOfメソッドの目的は、入力された値を処理しやすい型へ変えることです。フォームや設定ファイルから届く値は文字列になりやすいため、Integer、Double、Booleanなどに変換してから業務ロジックへ渡す流れがよく使われますし、これが一つの目安です。
その使い方では、変換処理をvalueOfに寄せることで、コードを読む人が「ここで型をそろえている」と判断できます。ただし、文字列の中身が数値として解釈できない場合はNumberFormatExceptionが起きるため、入力チェックや例外処理も同時に考える必要があります。
具体的には、null、空文字、範囲外の数値、基数に合わない文字を分けて扱いるのが目安です。こうした注意点を先に整理しておくと、応用例やカスタマイズに進んだときも変換の失敗箇所を追いやすくなります。
| 呼び出し | 主な入力 | 戻り値 | 用途 | 注意点 |
|---|---|---|---|---|
Integer.valueOf(String) | 10進数文字列 | Integer | 文字列から整数へ変換 | 不正形式でNumberFormatException |
Integer.valueOf(String,int) | 文字列とradix | Integer | 16進数や8進数の変換 | 基数の範囲と文字種を確認 |
Double.valueOf(double) | double | Double | 小数値のオブジェクト化 | 表示桁は別途調整 |
Boolean.valueOf(boolean) | trueまたはfalse | Boolean | 真偽値の変換 | 文字列変換時は大文字小文字に注意 |
Character.valueOf(char) | char | Character | 文字のオブジェクト化 | 複数文字は扱えない |
Enum.valueOf(Class,String) | enum型と名前 | enum定数 | 設定値から列挙型へ変換 | 名前不一致で例外 |
String.valueOf(Object) | 任意のオブジェクト | String | ログや表示用文字列 | nullは"null" |
その表から分かるように、valueOfメソッドは単一の機能名でありながら、実際の動きは呼び出すクラスによって変わります。初心者がつまずきやすいのは、Integer.valueOf()とString.valueOf()を同じ変換方向だと誤解する点です。
一方、変換後の値をどこで使うかを先に決めておくと、選ぶメソッドが明確になります。計算に使うなら数値型、画面表示やログに使うなら文字列、固定候補から選ぶならenumという切り分けで考えると、サンプルコードを実際の処理へ移しやすくなるのがポイントです。
valueOfメソッドの基本的な使い方
基本的な使い方は、変換元の値をvalueOfへ渡し、必要に応じてtoString()や代入先の型で受け取る流れになります。Javaのラッパークラスは型ごとに変換入口を持つため、整数ならInteger、小数ならDoubleという対応を意識します。
この章のサンプルコードは、元の値を文字列へ寄せる例を中心に扱いるのが一般的です。String.valueOf(num)でも同じ目的を達成できますが、ラッパークラス経由の書き方を知ると、オブジェクト化と文字列化の境界を理解しやすくなります。
サンプルコード1:整数からStringに変換
整数の変換では、intをIntegerへ変えたあと、toString()でStringにします。そのため、数値を表示用の文字列にしたい場面で、valueOfメソッドの動きを小さく確認できるのが現実的です。
結果: 期待される出力は変換後の文字列は:123です。
このコードでは、Integer.valueOf(num)がIntegerオブジェクトを返し、そこからtoString()で文字列を得ます。一方、表示だけが目的ならString.valueOf(num)でも十分で、意図に合わせて使い分けると読みやすくなります。
サンプルコード2:浮動小数点数からStringに変換
小数の変換では、Doubleを使いると整理できます。その結果、doubleの値をオブジェクトとして扱ったうえで、表示用のStringへ切り替えられます。
結果: 期待される出力は変換後の文字列は:123.45です。
このとき、Double.valueOf(num)は小数値を保持するDoubleを返します。ただし、表示桁や丸めを調整したい場合はString.format()やDecimalFormatを組み合わせる設計になります。
サンプルコード3:BooleanからStringに変換
真偽値の変換は、設定値やログ出力でよく使われますが、覚えておくと役立つでしょう。その場合、booleanをBooleanに変え、最終的に"true"または"false"の文字列へ寄せます。
結果: 期待される出力は変換後の文字列は:trueです。
このコードでは、Boolean.valueOf(flag)がBoolean.TRUE相当の値を返します。一方、文字列から真偽値へ戻すときは、Boolean.valueOf("true")以外の多くの文字列がfalse扱いになる点に注意します。
サンプルコード4:CharacterからStringに変換
1文字の変換では、charをCharacterに変えてから文字列化すると理解できます。そのため、文字単位の処理と文字列処理の間をつなぐ小さなサンプルコードとして扱えます。
結果: 期待される出力は変換後の文字列は:Aです。
この書き方は、Characterとして扱いたい処理が間にある場合に意味を持ちます。ただし、単にStringへ変えるだけならString.valueOf(ch)のほうが直接的です。
同様に、文字列処理の基礎を確認したい場合はJavaエスケープ処理の解説も関連します。文字列リテラル、n、"などを把握しておくと、変換後の表示を読み違えにくくなると覚えるとよいでしょう。
valueOfメソッドの応用例
応用例では、単純な文字列化だけでなく、複数型の値をそろえる処理、enumへの変換、独自クラスへの変換を扱います。そのため、valueOfメソッドを「型変換の共通入口」として設計する感覚がつかめます。
これらの使い方は、入力値を受け取る層とドメインオブジェクトを扱う層を分けたいときに役立ちますし、ここを基本と考えるとよいでしょう。ただし、変換に失敗した場合の扱いを決めていないと、例外が利用者向けの画面やログへそのまま流れるおそれがあります。
サンプルコード5:複数のデータタイプを一つのリストに格納
複数の値を同じList<String>に入れる場合、各値を文字列へそろえる必要があります。この応用例では、Integer、Double、Booleanを同じリストへ追加すると考えられます。
結果: 期待される出力はリストの要素:42、リストの要素:3.14、リストの要素:trueです。
このサンプルコードでは、各値の型を保ったままではなく、表示や保存に向いた文字列へ寄せています。一方、後で数値計算を行うならList<Object>や個別のDTOを検討し、文字列化のタイミングを遅らせるほうが扱いやすい場合もあります。
サンプルコード6:valueOfメソッドでenum値を取得
列挙型では、名前と一致する文字列から定数を取得できると言えるでしょう。そのため、設定ファイルやリクエスト値をSeasonのような型へ変える使い方が可能です。
結果: 期待される出力は変換後のenum値は:SUMMERです。
この例では、Season.valueOf("SUMMER")がSeason.SUMMERを返します。ただし、"summer"のように大文字小文字が一致しない文字列や、存在しない名前を渡すとIllegalArgumentExceptionが発生します。
そのため、列挙型の設計や注釈と組み合わせる場合は、Javaアノテーションの解説も理解の助けになるのが基本です。入力値の検証ルールを明示しておくと、enum変換の注意点をコードレビューで共有しやすくなります。
サンプルコード7:ユーザー定義オブジェクトとvalueOfメソッド
独自クラスにもpublic staticなvalueOfメソッドを用意できます。この応用例では、"Alice,30"という文字列を分割し、Userインスタンスを生成するのが目安です。
結果: 期待される出力はUser: Alice, Age: 30です。
このコードでは、split(",")で入力を分割し、2番目の要素をInteger.parseInt()で数値化しています。ただし、カンマが不足する場合はArrayIndexOutOfBoundsException、年齢が数値でない場合はNumberFormatExceptionになるため、公開用の処理では検証を挟みます。
サンプルコード8:valueOfメソッドをオーバーロード
引数の違いで処理を切り替えたい場合、valueOfをオーバーロードできるのがポイントです。そのカスタマイズにより、同じ変換名を保ちながら入力形式の違いを吸収します。
結果: 期待される出力は、どちらの呼び出しでもUser: Alice, Age: 30相当の文字列です。
このサンプルコードは、reverseがtrueのときだけStringBuilderで文字列を反転します。一方、引数の意味が読み取りにくくなる場合は、fromReversedText()のように別名のファクトリメソッドへ分ける選択もあります。
結果: 期待される出力例は、2行ともUser: Alice, Age: 30です。
これらの応用例では、valueOfメソッドを独自クラスの生成規約として使っているのが一般的です。ただし、入力形式が複雑になるほど、Pattern、Matcher、専用パーサーの導入を検討したほうが保守しやすくなります。
valueOfメソッドでのデータ変換の高度なテクニック
高度なテクニックでは、通貨記号の除去、parseIntとの違い、基数を使った変換を扱います。そのため、単なるサンプルコードの暗記ではなく、戻り値と例外の違いを判断できる状態を目指するのが現実的です。
基本的に、ラッパークラスのvalueOfメソッドはオブジェクトを返し、parseIntなどのparse系メソッドはプリミティブ値を返します。この差は小さく見えても、List<Integer>、Map<String,Integer>、Optional<Integer>のような型設計で効いてきます。
サンプルコード9:カスタムデータ変換
通貨や単位付き文字列を扱う場合、入力をそのまま数値へ変換できません。この応用例では、replaceAll()で通貨記号を取り除き、独自のCurrencyオブジェクトにすると整理できます。
結果: 期待される出力は¥300です。
このカスタマイズでは、変換前の正規化とオブジェクト生成を同じメソッド内で行っています。ただし、通貨記号が複数ある場合や小数を許す場合は、BigDecimalや通貨専用の値オブジェクトを使う設計が現実的です。
サンプルコード10:valueOfメソッドとparseIntの違い
Integer.valueOf()とInteger.parseInt()は、同じ文字列を整数として解釈できます。その違いは、前者がIntegerを返し、後者がintを返す点です。
結果: 期待される出力は、どちらも123です。
その違いは、代入先を見ると分かります。Integerとして扱うならvalueOf、計算用のintが必要ならparseIntを選ぶと、意図がはっきりします。
サンプルコード11:様々な数値形式での変換
10進数以外の文字列を扱う場合、radixを渡すオーバーロードを使いると理解できます。この使い方により、16進数や8進数の表現を10進数のIntegerへ変換できます。
結果: 期待される出力は26と18です。
このとき、radixに合わない文字が含まれると変換に失敗します。例えば2進数として扱う文字列に2が含まれる場合は、NumberFormatExceptionを想定して処理を組みます。
💡 Tips: Integer.valueOf("1a", 16)のように基数を明示すると、文字列の意味を読み手に伝えやすくなると覚えるとよいでしょう。設定値や外部ファイルを読む処理では、コメントよりも型と引数で意図を表すほうが保守しやすい場面があります。数値の判定ロジックを広げる場合は、Javaでうるう年を判定する解説のような条件分岐の読み方も関連します。変換後の数値をどう検査するかまで含めて考えると、サンプルコードを実務寄りに調整できると考えられます。
注意点と対処法
注意点として特に押さえたいのは、null、書式不正、型の範囲外です。valueOfメソッドは入力値を自動で安全な値へ直す仕組みではないため、呼び出す前後に検証を置く必要があります。
そのため、利用者入力や外部APIの値を扱う場合は、try、catch、if、Objects.nonNull()などで失敗時の経路を明確にします。例外を握りつぶすのではなく、どの入力が不正だったのかをログやエラー表示で追える形にすると原因調査が進みますし、ここがポイントです。
NullPointerExceptionの回避
Integer.valueOf(null)のようにnullを渡すと、変換前に参照が存在しないためNullPointerExceptionが発生します。この注意点は、フォーム未入力や設定値の欠落で起きやすいものです。
結果: 期待される出力はNull値が渡されました。です。
このサンプルコードは例外を捕捉していますが、通常は例外を起こす前に入力値を確認するほうが読みやすくなります。特にWeb入力では、空文字とnullを分けて扱うルールを決めておくと変換処理が安定します。
結果: 期待される出力はNull値が渡されました。です。
この対処法では、input != nullを満たす場合だけ変換を行います。ただし、""や" "はnullではないため、必要に応じてisBlank()やtrim()も組み合わせます。
String.valueOf(null)は文字列"null"を返しますが、Integer.valueOf(null)は例外になると言えるでしょう。同じvalueOfメソッドでもクラスごとに挙動が違うため、変換方向を確認してから使います。データ型の限界とオーバーフロー
数値型には表せる範囲があります。例えばbyteは-128から127までのため、"130"をByteへ変換しようとすると範囲外になるのが基本です。
結果: 期待される出力は数値がデータ型の限界を超えました。です。
この場合、Byte.valueOf("130")は変換できずNumberFormatExceptionを投げます。そのため、入力値の範囲を先に確認するか、Short、Integer、Longなど広い型で受ける設計を検討します。
逆に、保存先の仕様がbyteで固定されているなら、範囲外を明確なエラーとして返す処理が必要です。こうした注意点を曖昧にすると、変換失敗が後続処理の不具合に見えてしまいるのが目安です。
カスタマイズ方法
カスタマイズでは、独自クラスにvalueOfメソッドを持たせ、文字列からオブジェクトを生成する規約を作ります。その規約があると、Book.valueOf(text)のように、入力形式と変換先の関係を短いコードで示せます。
ただし、戻り値や引数を自由にしすぎると、呼び出し側が何を受け取るのか分かりにくくなるのがポイントです。そのため、標準ライブラリの命名に寄せつつ、失敗時の例外や入力形式をドキュメント化しておくのが実装パターンとしてよく見る形です。
サンプルコード12:カスタムクラスでvalueOfメソッドを実装
独自クラスでvalueOfメソッドを定義する場合、public staticにして、文字列から同じクラスのインスタンスを返す形にすると理解しやすくなります。この使い方は、単純なファクトリメソッドとして整理できます。
結果: このコードはBook.valueOf("タイトル,著者")のような呼び出しで、Bookオブジェクトを返す想定です。
このサンプルコードでは、カンマ区切りの1番目をtitle、2番目をauthorとして扱います。ただし、書名や著者名にカンマが含まれる場合は壊れやすいため、CSVパーサーやJSON形式の入力を検討します。
サンプルコード13:戻り値をカスタマイズ
戻り値をObjectにすると、条件に応じてIntegerまたはStringを返せますが、これは押さえたい点です。一方、呼び出し側で型判定が必要になるため、使う場面は限定して考えます。
結果: "123"ならInteger相当、"abc"ならString相当の値を返す想定です。
このカスタマイズは柔軟に見えますが、戻り値の型が呼び出し側から分かりにくくなります。そのため、実装ではsealed interface、専用の結果型、または別メソッド名で分岐を表すほうが読みやすい場合があります。
サンプルコード14:パラメータをカスタマイズ
引数を変えて同じ名前のメソッドを複数定義する方法がオーバーロードです。このカスタマイズにより、String用とInteger用で処理を分けられますし、これが一つの目安です。
結果: valueOf("abc")ならString: abc、valueOf(123)ならInteger: 123のような文字列を返す想定です。
この使い方では、コンパイル時の引数型によって呼ばれるメソッドが決まります。ただし、nullを渡すとどちらのオーバーロードを選ぶか曖昧になる場合があるため、valueOf((String) null)のようなキャストや事前チェックが必要になることがあります。
サンプルコード15:valueOfメソッドの動的な挙動を設定
リフレクションAPIを使うと、実行時にメソッドを探して呼び出せますが、覚えておくと役立つでしょう。このサンプルコードではgetMethod()とinvoke()を使い、対象クラスのvalueOfを動的に呼ぶ形を示します。
結果: 対象クラスに一致するvalueOfが存在する場合、その戻り値を返す想定です。
ただし、このコードは概念説明用であり、任意のクラスにそのまま適用できる設計ではありません。getMethod("valueOf", obj.getClass())は引数型が完全一致するメソッドを探すため、Stringを受け取るvalueOfを別の型から呼ぶ用途には合いません。
一方、リフレクションはアクセス制御、例外処理、性能、セキュリティの注意点が増えます。通常のアプリケーションでは、インターフェース、関数オブジェクト、Map<String,Function<String,?>>のような明示的な対応表で変換先を管理するほうが安全に設計できます。
オーバーライドや多態性の整理が必要な場合は、Javaのオーバーライド解説も関連するのが一般的です。valueOfメソッドのカスタマイズはstaticメソッドが中心ですが、クラス設計全体ではインスタンスメソッドとの役割分担も意識します。
valueOfを独自クラスへ追加する場合、標準クラスの慣習に合わせて「文字列表現から対象型を作る」用途に寄せると読み手の予測と合いやすくなります。複雑な生成条件があるなら、fromCsv()やfromRequest()のように入力形式を名前へ出す設計も選択肢になるのが現実的です。まとめ
JavaのvalueOfメソッドは、文字列やプリミティブ値をラッパークラス、列挙型、独自クラスへ変換する入口として使えます。基本的な使い方は、呼び出すクラス、渡す引数、受け取る戻り値をそろえて読むことです。
その理解があると、Integer.valueOf()、Double.valueOf()、Boolean.valueOf()、Character.valueOf()の違いを自然に追えます。応用例では、Listへの格納、enum変換、独自クラスの生成、基数付き変換などへ広げられますし、ここを基本と考えるとよいでしょう。
ただし、注意点としてnull、範囲外、不正な書式、大文字小文字の違いを避けて通れません。そのため、サンプルコードを実際の処理へ移すときは、入力検証、例外処理、戻り値の型設計を合わせて見直します。
カスタマイズでは、標準の命名に寄せたpublic static valueOfを用意すると、変換の意図を短く表せます。一方、戻り値を広げすぎたり、リフレクションへ寄せすぎたりすると読みにくくなるため、入力形式と失敗時の扱いを明確にして実装すると整理できます。
そのうえで、valueOfメソッドを選ぶか、parseIntやString.valueOfを選ぶかは、戻り値の型で判断します。オブジェクトとして受けたいならvalueOf、プリミティブ値が必要ならparse系、表示文字列にしたいならString.valueOfという整理が実用的です。
具体的には、入力を受け取る場所では検証を行い、変換の場所では型をそろえ、出力の場所では表示形式を整えます。この分担を守ると、valueOfメソッドの使い方、応用例、注意点、カスタマイズを同じ方針で扱えるようになると理解できます。
関連記事
- Java List型完全ガイド!初心者でもマスターできる7つのステップ
- Javaアノテーションの12選!初心者から上級者まで徹底ガイド
- Javaでうるう年を判定!初心者でも分かる9ステップ解説
- Javaエスケープ処理の10ステップマスターガイド
- Javaでマスターする!オーバーライドのたった7つのステップ
※本記事は実在のエンジニア複数名で構成される Japanシーモア編集部が、AI支援を活用して作成・校正・公開しています。


