【2026年8月最新】Java String型をint型に変換する方法まとめ|parseIntとvalueOfの違い・例外処理・AIコーディング活用
この記事の内容
「JavaでString型をint型に変換したいけど、parseIntとvalueOf、結局どっちを使えばいいの?」——検索でこの記事にたどり着いた方は、おそらくそんな疑問を抱えているはずです。
Javaの型変換(特にString→数値型)は、初心者がまず最初につまずくポイントの一つです。書き方自体はシンプルなのですが、例外処理を怠るとアプリが本番環境で突然落ちるという、地味に厄介な事故の原因にもなります。
この記事では、Integer.parseInt()とInteger.valueOf()の違いから、他の数値型への変換方法、実務でよくあるハマりどころ、さらにClaude CodeのようなAIコーディングツールをどう使えば型変換まわりのミスを未然に防げるかまで、一気通貫で整理します。
この記事を最後まで読むと、次の6つが明確になります。
01 OVERVIEW String→int変換の全体像と使う場面 なぜこの変換が必要になるのか、まず全体像を掴む
Javaのプログラムでは、ユーザーからの入力・ファイルの読み込み・外部APIのレスポンスなど、数値であっても一旦は文字列(String型)として受け取る場面が非常に多くあります。フォームの入力欄、CSVファイルの1行、JSONのフィールドなどは、プログラム側から見るとすべて文字の並びに過ぎません。
しかし、その値を使って計算をしたり、条件分岐(大小比較)をしたりするには、文字列のままでは扱えません。そこで必要になるのがString型からint型(あるいはlong・doubleなどの数値型)への変換です。
📚 用語解説
型変換(キャスト):あるデータ型の値を別のデータ型に変換すること。JavaにおけるString→intの変換は、単純な型のキャスト(例: (int) 3.14のような書き方)ではなく、専用のメソッド呼び出しが必要になる点が特徴です。
代表的な変換方法は以下の3系統に整理できます。
| 方法 | 戻り値の型 | 主な用途 |
|---|---|---|
| Integer.parseInt(String) | int(プリミティブ型) | 計算・比較にすぐ使いたい場合の定番 |
| Integer.valueOf(String) | Integer(ラッパークラス) | コレクション(List等)に格納したい場合 |
| new Integer(String) | Integer(ラッパークラス) | Java 9以降は非推奨。使用は避ける |
Java 9でnew Integer(String)およびnew Integer(int)は非推奨(deprecated)となりました。理由はメモリ効率の悪さです。同じ値のIntegerインスタンスを毎回新規生成してしまうため、後述するInteger.valueOf()のキャッシュの恩恵を受けられません。新規のコードでは必ずparseIntかvalueOfを使いましょう。
1-1. なぜ変換方法が複数あるのか
「結局どれを使えばいいのか」と迷う最大の理由は、intとIntegerという2つの異なる型が存在することにあります。intはプリミティブ型(基本データ型)と呼ばれる、Javaの中で最も基本的な数値の入れ物です。一方Integerは、intを「オブジェクトとして扱えるようにラップ(包装)した」ラッパークラスです。
📚 用語解説
ラッパークラス:int・long・doubleなどのプリミティブ型(基本データ型)を、オブジェクトとして扱えるように包んだクラス。IntegerはintのラッパークラスでLong・Double・Booleanなども同様の関係にあります。ListやMapなど「オブジェクトしか格納できない」コレクションにプリミティブ型の値を入れたいときに必要になります。
この違いにより、「計算に使いたいだけならint(parseInt)」「コレクションに入れたい・nullを許容したいならInteger(valueOf)」という使い分けが生まれます。次のセクションから、それぞれを具体的に見ていきます。
02 PARSEINT Integer.parseInt()の使い方と内部動作 最も使用頻度の高い変換方法を正しく理解する
Integer.parseInt()は、String型の文字列を受け取り、プリミティブ型のintを返すstaticメソッドです。最もシンプルで使用頻度が高い変換方法であり、迷ったらまずこれを使うと考えて問題ありません。
String numStr = "123";
int num = Integer.parseInt(numStr);
System.out.println(num); // 123(int型)
System.out.println(num + 1); // 124(そのまま計算に使える)
見ての通り、変換したnumはすぐに四則演算に使える状態になります。これがparseIntの最大のメリットです。
2-1. 基数(radix)を指定した変換
parseIntには、第2引数に基数(何進数として解釈するか)を指定できるオーバーロードも用意されています。
int binary = Integer.parseInt("1010", 2); // 2進数として解釈 → 10
int hex = Integer.parseInt("1A", 16); // 16進数として解釈 → 26
int octal = Integer.parseInt("17", 8); // 8進数として解釈 → 15
外部システムから16進数の文字列(例えばカラーコードやハッシュ値の一部)を受け取って数値として扱いたい場合などに使う機会があります。日常的な業務システムではあまり出番はありませんが、覚えておくと役立つ場面が出てきます。
2-2. 戻り値がintであることの意味
parseIntの戻り値はプリミティブ型のintなので、nullを代入できません。これは地味に重要なポイントです。「値が存在しない場合はnullにしたい」という設計をしたい場合、parseIntではなく次章で紹介するvalueOf(Integer型)を使う必要があります。
「計算・比較にすぐ使いたい」「nullになる可能性がない」の2条件を満たすなら、迷わずparseIntを使うのが実務上の定石です。実際の業務コードの9割以上のケースはこちらで足ります。
03 VALUEOF Integer.valueOf()との違いと使い分け オートボクシングとキャッシュの仕組みを理解する
Integer.valueOf()は、String型を受け取ってIntegerオブジェクトを返すstaticメソッドです。見た目の使い方はparseIntとほぼ同じですが、内部の挙動と戻り値の型に明確な違いがあります。
String numStr = "123";
Integer num = Integer.valueOf(numStr);
System.out.println(num); // 123(Integer型・オブジェクト)
3-1. valueOf()のキャッシュという最適化
Integer.valueOf()には、Javaの言語仕様上おもしろい最適化が入っています。-128〜127の範囲の値については、Integerオブジェクトを毎回新規生成せず、あらかじめ用意されたキャッシュ済みインスタンスを再利用するという仕様です。
📚 用語解説
Integerキャッシュ:Integer.valueOf()が-128〜127の範囲の値に対して行う最適化。同じ値なら同じオブジェクト(同一参照)を返すことで、メモリ確保のコストを削減する仕組み。範囲外の値(128以上や-129以下)では毎回新しいオブジェクトが生成されます。
Integer型同士を==で比較すると、キャッシュ範囲内(-128〜127)ではtrue、範囲外ではfalseになる場合があり、直感に反する挙動を生みます。Integer型の値を比較するときは、必ず.equals()メソッドを使ってください。==はオブジェクトの参照が同じかどうかを見る演算子であり、値そのものの比較にはequals()が正解です。
3-2. オートボクシング/アンボクシングとの関係
valueOf()を理解するうえで欠かせないのが「オートボクシング」という仕組みです。
📚 用語解説
オートボクシング/アンボクシング:プリミティブ型(int等)とラッパークラス(Integer等)を、Javaコンパイラが自動的に相互変換してくれる仕組み。int値をIntegerが必要な場所に代入すると自動的にInteger.valueOf()相当の変換(オートボクシング)が行われ、逆にIntegerをintとして使うと自動的に.intValue()相当の変換(アンボクシング)が行われます。
この自動変換のおかげで、開発者が明示的にvalueOf()やintValue()を書かなくても、intとIntegerを行き来できます。ただし、自動で行われているがゆえに意図しない場所でオブジェクト生成コストが発生していたり、nullのIntegerをアンボクシングしてNullPointerExceptionが発生したりするという落とし穴もあります。
04 OTHER TYPES 他の数値型(byte/short/long/float/double)への変換 intだけでなく、あらゆる数値型への変換方法を一覧化する
String→intの変換方法を理解すれば、他の数値型への変換も基本的に同じパターンで対応できます。Javaの各ラッパークラスには、intと対称的な変換メソッドが用意されています。
| 対象の型 | プリミティブ型を返す | ラッパー型を返す | 主な用途 |
|---|---|---|---|
| byte | Byte.parseByte(String) | Byte.valueOf(String) | -128〜127の小さな整数(省メモリ用途) |
| short | Short.parseShort(String) | Short.valueOf(String) | -32,768〜32,767の整数 |
| int | Integer.parseInt(String) | Integer.valueOf(String) | 一般的な整数(最も使用頻度が高い) |
| long | Long.parseLong(String) | Long.valueOf(String) | 約±922京までの大きな整数(ID・タイムスタンプ等) |
| float | Float.parseFloat(String) | Float.valueOf(String) | 単精度浮動小数点数 |
| double | Double.parseDouble(String) | Double.valueOf(String) | 倍精度浮動小数点数(金額計算等で多用) |
見ての通り、「型名.parseXxx(String)」「型名.valueOf(String)」という命名の規則性があるため、一つ覚えれば残りは応用が効きます。
long userId = Long.parseLong("1234567890123");
double price = Double.parseDouble("1980.5");
float ratio = Float.parseFloat("0.75");
4-1. intの範囲を超える数値を扱うときの注意
int型が扱えるのは約-21億〜21億(正確には-2,147,483,648〜2,147,483,647)までです。これを超える整数(例えばデータベースの連番IDやSNSの投稿IDなど、桁数が大きくなりがちな値)を扱うときは、最初からlong型を使う設計にしておくことが重要です。
IDやタイムスタンプなど「将来的に桁数が増える可能性がある値」は、最初からLong.parseLong()でlong型として扱っておくと、後から桁あふれで書き直す手戻りを防げます。
4-2. 金額計算にdoubleを使うときの注意
金額など、正確性が求められる数値をdouble(浮動小数点数)で扱うと、丸め誤差が発生することがあります。0.1 + 0.2が正確に0.3にならない、というのはプログラミング全般でよく知られた話です。会計・決済のように1円単位の正確性が求められる場面では、BigDecimalという別のクラスを使う設計が推奨されます。
📚 用語解説
丸め誤差:コンピュータが小数を2進数で近似的に表現することによって生じる、ごくわずかな計算誤差。doubleやfloatで金額計算を繰り返すと、この誤差が積み重なり、最終的な合計金額がずれる事故につながることがあります。
05 EXCEPTION HANDLING 例外処理とバリデーションの正しい書き方 NumberFormatExceptionを恐れず、正しく制御する
String→数値の変換で最も事故が起きやすいのが、変換できない文字列を渡してしまうケースです。ここを正しく処理できていないシステムは、想定外の入力ひとつで画面が真っ白になったり、処理全体が停止したりします。
5-1. NumberFormatExceptionが発生する条件
📚 用語解説
NumberFormatException:文字列を数値に変換しようとした際、その文字列が数値として解釈できない場合にスローされる例外。数字以外の文字が含まれる場合、空文字の場合、null(一部のメソッド)の場合、int型の範囲を超える場合などに発生します。
Integer.parseInt("abc"); // NumberFormatException
Integer.parseInt(""); // NumberFormatException(空文字)
Integer.parseInt("1.5"); // NumberFormatException(小数点は不可)
Integer.parseInt(" 123"); // NumberFormatException(前後の空白は不可)
Integer.parseInt("99999999999"); // NumberFormatException(int範囲超過)
Integer.parseInt()は前後の空白(スペースや改行)を許容しません。フォーム入力やCSVの値をそのまま渡すと、見た目には数字しか入っていないのに変換に失敗する、というハマりどころがよくあります。事前に.trim()で空白を除去する習慣をつけましょう。
5-2. try-catchによる安全な変換
ユーザー入力や外部データなど、変換に失敗する可能性がある入力を扱う場合は、必ずtry-catchで例外を捕捉します。
String input = "abc";
int result;
try {
result = Integer.parseInt(input.trim());
} catch (NumberFormatException e) {
System.out.println("数値として解釈できない入力です: " + input);
result = 0; // デフォルト値でフォールバック、または処理を中断する
}
5-3. 変換前の正規表現バリデーション
例外に頼らず、事前に「数値として妥当な文字列かどうか」を判定したい場合は、正規表現を使う方法もあります。
📚 用語解説
正規表現:文字列のパターンを表現するための記法。「数字だけで構成されているか」「先頭にマイナス記号を許容するか」といった条件を、コードで簡潔に表現できます。JavaではString.matches()やPatternクラスで利用します。
String input = "-123";
if (input.matches("-?\\d+")) {
int num = Integer.parseInt(input);
System.out.println("変換成功: " + num);
} else {
System.out.println("数値ではありません: " + input);
}
文字列を
受け取る
trim()で
空白除去
正規表現か
try-catchで検証
成功時のみ
後続処理へ
06 REVERSE CONVERSION 逆変換:数値→文字列への変換方法 数値をStringに戻す3つの書き方の違い
ここまではString→数値の変換を扱ってきましたが、実務では逆方向(数値→String)の変換も同じくらい頻繁に発生します。画面に表示する、ログに出力する、他システムに文字列としてデータを渡す、といった場面です。
| 書き方 | 特徴 |
|---|---|
| String.valueOf(int) | int専用のオーバーロードで、最も意図が明確で推奨される書き方(引数はプリミティブint型のためnullは渡せない) |
| Integer.toString(int) | Integerクラス側のメソッド。基数(進数)を指定した変換にも対応 |
| "" + num(文字列連結) | 手軽だが、意図が読み取りにくくコードレビューで指摘されやすい |
int num = 123;
String s1 = String.valueOf(num); // "123"
String s2 = Integer.toString(num); // "123"
String s3 = "" + num; // "123"(動くが非推奨の書き方)
String hex = Integer.toString(255, 16); // "ff"(16進数に変換)
3つとも最終的な結果は同じですが、コードの意図を明確にするという観点で、実務ではString.valueOf()が最も推奨されます。"" + numという書き方は初心者コードでよく見られますが、意図しない連結バグの温床になりやすいため、レビューで指摘されることが多い書き方です。
07 COMMON PITFALLS 実務でよくあるハマりどころ 「動かない」の9割はこのパターンに当てはまる
ここまでの基本を押さえていても、実務では思わぬところでつまずきます。ここでは特に頻度の高い4つの落とし穴を紹介します。
7-1. 全角数字が混ざっている
日本語圏特有の落とし穴として、全角数字(123)が入力に混ざるケースがあります。Integer.parseInt()は全角数字を数値として認識できず、NumberFormatExceptionになります。フォームの入力値やExcelからコピペしたデータで特に発生しやすい問題です。
Integer.parseInt("123"); // NumberFormatException(全角数字は不可)
全角数字を扱う可能性がある入力(日本語ユーザー向けのフォーム等)では、変換前にjava.text.Normalizerや自作の変換処理で半角に統一してから、parseIntに渡す設計にしておくと事故を防げます。
7-2. カンマ区切りの数値
「1,234,567」のようにカンマ区切りで表示された数値も、そのままではparseIntに通せません。事前にreplace(",", "")でカンマを除去する処理が必要です。
String input = "1,234,567";
int num = Integer.parseInt(input.replace(",", "")); // 1234567
7-3. 桁あふれ(オーバーフロー)
int型の上限(約21億)を超える文字列をparseIntで変換しようとすると、NumberFormatExceptionが発生します。ユーザーIDや通し番号がシステムの成長とともに桁数を増やしていくケースでは、後からlong型への変更が必要になることがあります。
7-4. ロケール依存の数値フォーマット
国・地域によっては、小数点をカンマ「,」で表現するロケール(例: ドイツ語圏)もあります。海外向けのシステムでは、単純なparseIntやparseDoubleではなく、NumberFormatクラスを使ってロケールを意識した変換を行う必要が出てくる場合があります。
📚 用語解説
ロケール:ユーザーの言語・国・地域の設定情報。数値やお金の表記、日付の表記は国によってルールが異なり、Javaではjava.util.Localeクラスでこの違いを扱います。
| 落とし穴 | 症状 | 対策 |
|---|---|---|
| 全角数字 | NumberFormatException | 半角に正規化してから変換 |
| カンマ区切り | NumberFormatException | replace(",", "")で除去 |
| 桁あふれ | NumberFormatException | long型を検討 |
| 前後の空白 | NumberFormatException | trim()を挟む |
| ロケール依存の表記 | 意図しない値になる | NumberFormatクラスを利用 |
08 AI CODING 【独自】経営者・管理職がAIコーディングと付き合う視点 コードを書かない立場でも知っておきたいAI活用の考え方
ここまでJavaの型変換について技術的な内容を解説してきましたが、最後に少し視点を変えます。「自分はコードを書かないが、エンジニアと仕事をする経営者・管理職」という方に向けて、この記事のテーマとも関係が深い「AIコーディングツール」との付き合い方をお伝えします。
弊社(株式会社GENAI)では、Claude CodeというAIエージェントを社内の開発・業務改善に活用しています。ここまで紹介したようなString→int変換のような定型的なコード実装は、実はClaude Codeのようなツールが最も得意とする領域の一つです。
📚 用語解説
Claude Code:Anthropicが提供するAIコーディングエージェント。「この入力値をバリデーションしてint型に変換する処理を書いて」といった自然な言葉の指示だけで、例外処理まで含めたコードを自動生成できます。ターミナル版だけでなくデスクトップ版もあり、非エンジニアでもチャット感覚で使えます。
8-1. なぜ型変換のような「基本」こそAIに向いているのか
Integer.parseIntとvalueOfの使い分け、NumberFormatExceptionの処理、全角数字やカンマ区切りへの対応——これらは「知っていれば書けるが、うっかり忘れやすい」定型パターンです。Claude Codeのようなツールは、こうした「知識はあるが漏れやすい」領域の実装・レビューを高い精度でこなします。
8-2. 非エンジニアがAIコーディングに関わる意味
「自分はコードを書かないから関係ない」と思う方も多いかもしれません。しかし、開発チームの生産性・品質に直結する意思決定を担う立場であれば、AIコーディングツールがどこまでの品質を担保できるのかを肌感として知っておくことには大きな意味があります。
選ぶ
例: 入力値
チェック処理
任せてみる
雑な指示でも
意図を汲む
エンジニアが確認
レビュー時間が
大幅短縮
横展開
同種のバグを
未然に防止
弊社では、開発以外にも営業・広告・経理・秘書業務までClaude Codeを組み込んで運用しており、月額約30,000円(Max 20xプラン)で、肌感として1名分弱の業務量を分担できている実感を持っています。詳しくは他の記事でも紹介していますが、「AIに何をどこまで任せられるか」を知ることは、非エンジニアの経営判断にも直結するテーマになってきています。
コードの品質担保も、Claude Codeの業務活用も、AI鬼管理が伴走します
「エンジニアと会話できるレベルでAIコーディングを理解したい」「開発以外の業務にもAIを活かしたい」という経営者・管理職の方に向けて、Claude Codeの導入設計をサポートしています。
NEXT STEP
この記事の内容を、あなたのビジネスで
実践してみませんか?
AI活用を自社で回せるようになりたい方へ
AI鬼管理
Claude Code・Cowork導入支援から業務設計・社内浸透まで実践ベースで伴走。「自社で回せる組織」を90日で作る経営者向けトレーニング。
よくある質問
Q. Integer.parseInt()とInteger.valueOf()、結局どちらを使えばいいですか?
A. 計算や比較にすぐ使いたいだけならInteger.parseInt()で十分です。コレクション(List等)に格納したい、あるいはnullを許容する設計にしたい場合はInteger.valueOf()を使います。実務コードの9割以上はparseIntで足ります。
Q. NumberFormatExceptionはどうやって防げばいいですか?
A. 完全に防ぐことはできませんが、事前にtrim()で空白を除去し、正規表現やtry-catchでバリデーションすることでほとんどのケースに対応できます。特に外部からの入力を扱う処理では必ずこの対策を入れるべきです。
Q. "123"のような文字列だけでなく、"123.45"のような小数を含む文字列はどう変換しますか?
A. Integer.parseInt()は整数専用のため小数点を含む文字列はNumberFormatExceptionになります。小数を扱いたい場合はDouble.parseDouble()やFloat.parseFloat()を使ってください。
Q. nullの文字列をInteger.parseInt()に渡すとどうなりますか?
A. NumberFormatExceptionが発生します(NullPointerExceptionではありません)。null許容の可能性がある入力では、変換前に必ずnullチェックを行ってください。
Q. 全角数字(123)はそのまま変換できますか?
A. できません。Integer.parseInt()は半角の数字のみを認識するため、全角数字を含む文字列を渡すとNumberFormatExceptionになります。事前に半角へ正規化する処理を挟む必要があります。
Q. 金額の計算でdoubleを使うのは問題がありますか?
A. 丸め誤差が発生する可能性があるため、1円単位の正確性が求められる会計・決済処理では推奨されません。そうした用途ではBigDecimalクラスの利用を検討してください。
Q. Claude Codeはこうした型変換のコードもちゃんと書けますか?
A. はい。「入力値をバリデーションしてint型に変換する処理を書いて」といった自然な指示で、例外処理・バリデーションを含むコードを生成できます。既存コードの抜け漏れをレビューさせる使い方も効果的です。
Claude Codeで業務自動化を90日で叩き込む
経営者向けの伴走型パーソナルトレーニング
Claude Code を業務に落とし込む
専門研修コース一覧
受講者本人の業務を題材に、「使いこなせる」状態になるまで伴走する研修プログラム。1対1特化型・ハンズオン・法人講座の3コースを展開中。業務特化・実装まで踏み込むタイプのClaude Code研修です。
研修コース一覧を見る →AI鬼管理へのお問い合わせ
この記事を読んで気になった方へ。
AI鬼管理の専門スタッフが、御社に最適な
業務自動化プランを無料でご提案します。




