intの基本
プログラムを書いていると、数を扱いたい場面にたくさん遭遇します。
「ループを10回繰り返したい」
「ユーザーの年齢を保存したい」
「計算結果を表示したい」
など、数はプログラムのあらゆる場面で登場するからです。
そんなとき、Javaでは「int型」を使って整数を扱います。int型は、Javaで整数を扱う際に最も頻繁に使われるデータ型です。
ここでは、int型の基本的な意味や扱える数の範囲、他の数値型との関係について見ていきましょう。
int型の意味
int型は、整数を表すためのデータ型です。
「データ型」という言葉が難しく感じるかもしれませんが、「どんな種類のデータか」を表すものだと考えてください。整数なら「int型」、文字列なら「String型」という具合です。
int型は、年齢や個数、ループの回数など、小数点を含まない数を扱う場面で使います。Javaで整数を扱う際の、最も基本的なデータ型です。
出力結果
10
25このプログラムでは、countという名前の変数に10を代入し、ageという変数に25を代入しています。
intという言葉が「この変数には整数を代入しますよ」という宣言になっているのです。
扱える数値の範囲
int型で扱える数には、実は上限と下限があります。
具体的には、-2,147,483,648から2,147,483,647までです。
およそマイナス21億からプラス21億まで、と覚えておくといいでしょう。
「そんなに大きな数、使わないのでは?」と思うかもしれませんが、意外と超えてしまうことがあります。この範囲を超える計算をすると、「オーバーフロー」という現象が起き、予想外の値になってしまいます。
出力結果
-2147483648最大値に1を足したら、最小値に戻ってしまいました。これがオーバーフローです。
大きな数を扱う場合は、より広い範囲をカバーできる「long型」という別の型を使います。
他の数値型との関係
実は、整数を扱う型はint以外にもあります。
Javaで整数を扱える型はbyte、short、int、longという4種類です。それぞれ扱える数の範囲が違います。
型名 |
サイズ |
最小値 |
最大値 |
|---|---|---|---|
byte |
8ビット |
-128 |
127 |
short |
16ビット |
-32,768 |
32,767 |
int |
32ビット |
-2,147,483,648 |
2,147,483,647 |
long |
64ビット |
-9,223,372,036,854,775,808 |
9,223,372,036,854,775,807 |
どれを使えばいいか迷ったら、intを使いましょう。intは汎用性が高く、特別な理由がない限り整数の標準的な選択肢です。メモリ使用量を抑えたいケースであればbyteやshort、より大きな数が必要な場合にはlongを選びましょう。
初期値と宣言時の注意点
変数を使うには、まず「宣言」という作業が必要です。
宣言とは、「これから整数を入れる箱を用意します」とJavaに伝えることです。変数は、よく箱に例えられます。その箱に実際に値を入れることを「初期化」といいます。この宣言と初期化のやり方を間違えると、エラーが出てしまいます。
ここでは、int型変数の正しい宣言方法と、初期化の考え方、よくあるミスについて見ていきましょう。
初期値の考え方
変数を作ったとき、「最初にどんな値が入っているか」は場所によって違います。
クラスのフィールド(クラスの中、メソッドの外で宣言した変数)として作った場合、自動的に0が入ります。一方、メソッドの中で作った変数(ローカル変数)には、最初は何も入っていません。
この違いを知らないと、「なぜかエラーが出る......」と悩むことになります。
出力結果
0
0フィールドは自動的に0で初期化されますが、ローカル変数は使う前に必ず値を入れる必要があります。
宣言と代入の基本
int型の変数を作るには、intというキーワードの後に変数名を書きます。
宣言と同時に値を入れることもできますし、宣言してから後で値を入れることもできます。
出力結果
100
200宣言と同時に値を入れる方が、「この変数は最初からこの値を持っている」ということが明確になるため、バグを防ぎやすくなります。
この例では、宣言と代入が近い場所にあるので、ひと目でわかります。
しかし、実際のプログラムではコードが長くなると、「あれ、この変数にはいつ値が入ったんだっけ?」と混乱することがあるので注意です。
未初期化時の注意
メソッドの中で作った変数(ローカル変数)を、値を入れずに使おうとすると、コンパイルエラーが出ます。
「この変数には、まだ値が入っていません!」とコンパイラが教えてくれるのです。これはエラーではありますが、実は安全装置として働いています。
出力結果
10初期化していない変数を使おうとすると、プログラムが実行される前にエラーとして警告してくれます。
試しに、コメントアウトされた// System.out.println(value);の//を消去して実行してみてください。
この仕組みのおかげで、「値が入っていない変数を使ってしまう」というバグを防げるのです。
intと他の型との違い
先述した通り、整数を扱う型はintだけではありません。それぞれ用途が違います。似ている型との違いを知っておくと、int型をより理解できるでしょう。
ここでは、Integerやlong型との違い、そして状況に応じた型の選び方について説明します。
Integerとの違い
intとIntegerは名前が似ていますが、実は別物です。Integerは「ラッパークラス」と呼ばれるものです。
ところで、先ほど登場した4種類の整数型(byte、short、int、long)を思い出してください。
実は、この4つは「プリミティブ型」と呼ばれるグループに属しています。プリミティブ型は、値そのものをシンプルに扱う型です。余計な機能を持たない分、動作が速くてメモリも節約できます。
一方、ラッパークラスはプリミティブ型の値を「オブジェクト」として扱えるようにしたものです。
「intをラップ(包む)してIntegerにする」というイメージです。
簡単にいうと、次のような特徴の違いがあります。
- int(プリミティブ型): 数そのもの(シンプルで速い)
- Integer(ラッパークラス): 数を箱に入れたもの(機能が多いが少し重い)
単純な計算や比較では、intを使う方が効率的です。
しかし、「nullを扱いたい」「リストなどのコレクションに入れたい」という場面では、Integerを使う必要があります。
出力結果
10
20intは= 10のように直接数値を代入できますが、IntegerはInteger.valueOf(20)というメソッドを使っています。なぜでしょうか?
これは、intがシンプルな値なのに対し、Integerはオブジェクト(もっと複雑なもの)だからです。ただ、実はInteger wrapper = 20;のように直接代入することもできます。Javaが自動的に変換してくれるのです。
このラッパークラスの理解というのは、初心者にとって難所の一つです。最初のうちは、「普段はintを使い、必要なときだけIntegerを使う」という理解だけでも十分です。
longとの違い
long型は、int型よりも大きな整数を扱える型です。int型の範囲(約マイナス21億からプラス21億)を超える計算が必要な場合や、データベースの大きなIDなどを扱うときに使います。
ただし、long型はint型の2倍のメモリを使います。必要がない限り、int型を使う方が効率的です。
出力結果
1000000
10000000000long型の数値を書くときは、最後に「L」を付けます。この「L」がないと、Javaは「int型の数値」だと判断し、エラーになってしまうからです。
桁数と選び方
どの型を使えばいいか迷ったときの判断基準を見てみましょう。
想定ケースと、それに適した型は次の通りです。
ケース |
推奨する型 |
|---|---|
ループカウンタや一般的な計算 |
int |
データベースの大きなID |
long |
メモリ制約が厳しい小さな値 |
byte, short |
基本的には、まずintを使って、範囲が足りなくなったらlongを検討する、という流れで大丈夫です。
byteやshortは、特殊な事情がない限り使う機会は少ないでしょう。迷ったら、intを選んでおけば間違いありません。
比較や計算での使い方
int型が本領発揮するのは、やはり計算や比較をするときです。
「AとBはどちらが大きい?」
「この数は10以上?」
といった判定や、足し算、引き算などの計算処理で、int型は頻繁に使われます。
ここでは、数値の比較方法、計算時の注意点、条件分岐での活用例について見ていきましょう。
数値の比較方法
int型の値を比較するには、比較演算子を使います。
「等しいかどうか」を調べるときは==、「大小関係」を調べるときは<や>を使います。
これらの演算子は、真偽値(trueかfalse)を返します。
出力結果
false
truea == bは「aとbは等しい」という意味で、10と20は等しくないのでfalse(偽)になります。
a < bは「aはbより小さい」という意味で、10は20より小さいのでtrue(真)になります。
こういった比較は、if文などの条件分岐でよく使われます。この基本的な比較演算子は必ず覚えておきましょう。
ちなみに、a = bだと意味が全く変わってしまうので注意してください。
=が一つだけだと「代入」になってしまいます。
つまり「bの値をaに入れる」という意味です。比較するときは必ず==(イコール2つ)を使いましょう。
計算時の注意点
int型同士で計算すると、結果もint型になります。
これは便利なのですが、割り算のときに注意が必要です。int型同士の割り算では、小数点以下が切り捨てられてしまいます。
出力結果
3
-29496729610÷3は本当は3.333...ですが、int型では3になります。小数点以下が切り捨てられるのです。
もう一つ注意したいのが、オーバーフローです。範囲を超える計算をすると、予想外の値になってしまいます。
20億 + 20億 = 40億のはずですが、int型の範囲(約21億まで)を超えてしまい、おかしな値になっているのが確認できるはずです。
大きな数の計算が必要な場合は、long型を使うか、範囲に収まるかチェックする必要があります。
条件分岐での利用
if文やswitch文などの条件分岐で、int型を活用できます。
「特定の値や範囲に応じて処理を切り替えたい」というとき、比較演算子と組み合わせて使います。
出力結果
ネコscoreが80以上なら「ネコ」、そうでなければ「イヌ」を表示するプログラムです。
このように、int型と比較演算子を組み合わせることで、プログラムの動作を柔軟に制御できます。プログラミングに触れていると、この形は幾度となく目にすることになります。それだけint型は重要な役割を果たしているのです。
ちなみに、条件分岐はループの回数を管理したり、ユーザーの入力に応じて処理を変えたりと、使い道は実に多岐にわたります。int型と同じくプログラミングの根幹をなす仕組みだといえます。
stringへの変換と連携
プログラムを作っていると、「計算結果を画面に表示したい」「数値を含むメッセージを作りたい」という場面が出てきます。そんなとき、int型の数値を文字列(String型)に変換する必要があります。Javaでは、int型とString型を相互に変換する方法がいくつか用意されています。
ここでは、変換の基本的な方法や他の型との組み合わせについて見ていきましょう。
string変換の基本
int型をStringに変換するには、いくつかの方法があります。
代表的なのが、String.valueOf()メソッドとInteger.toString()メソッドです。どちらも数値を文字列に変換してくれます。
出力結果
123
123結論からいうと、どちらを使っても結果は同じです。好みで選んで大丈夫ですが、String.valueOf()の方がよく使われます。変換後の文字列は、他の文字列と連結したり、ファイルに書き出したりできます。
ちなみに、2つのメソッドの違いが気になる方もいると思うので、簡単にその違いに触れておきましょう。その大きな違いは、引数(渡すデータ)が「空っぽ(null)」だったときの挙動です。Integer.toString()にnullを渡すとエラーが起きますが、String.valueOf()は問題なく動きます。
ただし、初心者のうちはここまで踏み込んだ内容を覚えていなくても大丈夫です。まずは「数値を文字列に変換できる」ということだけ理解していれば十分です。
表示や出力での利用
実は、System.out.println()で数値を表示するとき、わざわざ文字列に変換しなくても大丈夫です。
Javaが自動的に文字列に変換してくれるからです。
出力結果
カウント: 5文字列と数値を+でつなぐと、自動的にcountが文字列に変換され、「カウント: 5」という一つの文字列になっています。これは便利な機能ですが、その挙動をあらかじめ知っておくと思わぬ間違いを防げます。変数の状態を確認したいときなど、デバッグの際にもよく使う書き方です。
他の型との組み合わせ
int型は、String型以外の数値型とも組み合わせて使えます。例えば、int型とlong型を計算すると、結果は自動的にlong型になります。「小さい型 + 大きい型 = 大きい型」というルールです。
出力結果
値は100です
1100最初の行では、intが自動的にStringに変換されて連結されています。2行目では、intとlongの計算結果がlong型になっています。
こうした型の自動変換を「暗黙の型変換」といいます。Javaが状況に応じて適切に型を変換してくれるので、多くの場合は意識する必要がありません。
ただし、こうした変換のルールを知っておくと、エラーが出たときに原因がわかりやすくなります。
よくある質問(Q&A)
Q: int型で小数を扱えますか?
A: int型は整数専用のため、小数点以下の値は扱えません。小数が必要な場合は、doubleやfloat型を使用します。
出力結果
3.14Q: intとIntegerはどう使い分けますか?
A: 基本的にはintを使い、特別な理由があるときだけIntegerを使います。
Integerが必要なのは、「nullを扱いたい」「コレクション(リストなど)に入れたい」という場面です。パフォーマンスを重視する計算ではintが適しています。
出力結果
ウサギQ: int型の最大値を超えたらどうなりますか?
A: オーバーフローが発生し、最小値に折り返します。大きな数値を扱う場合は、long型への変更を検討してください。
出力結果
-2147483648Q: 文字列をintに変換する方法は?
A: Integer.parseInt()メソッドを使います。
ただし、変換できない文字列(「abc」など)を渡すとエラー(例外)が発生し、プログラムが止まってしまいます。そのため、入力値が本当に数字かどうか確認してから変換することが大切です。
出力結果
456まとめ
int型は、Javaで整数を扱うための基本的なデータ型です。
「年齢を保存したい」
「ループを10回繰り返したい」
「計算結果を表示したい」
など、プログラミングのありとあらゆる場面で使います。
今回学んできた内容を振り返ってみましょう。
int型の基本
- 扱える範囲は約マイナス21億からプラス21億まで
- クラスのフィールドは、自動的に0で初期化される
- メソッド内のローカル変数は、使う前に必ず初期化が必要
int型と他の型との違い
- Integerはラッパークラスで、nullやコレクションに対応
- long型はより大きな数を扱える
- 計算時のオーバーフローや除算の切り捨てに注意
実践的な使い方
- 比較演算子と組み合わせて、条件分岐に活用できる
- String型との相互変換で表示や出力が簡単にできる
- 他の数値型との計算では、自動的に型変換される
最初は「intって何?」と戸惑っていたかもしれません。しかし、今回の記事を通して、どういうものかわかったのではないでしょうか?
実際にコードを書いて動かしてみると、さらに感覚がつかめてきます。
エラーが出たときは、「値を入れ忘れていないか」「範囲を超えていないか」をチェックしてみましょう。
この記事で紹介したポイントを押さえておけば、多くのエラーを自分で解決できるはずです。
int型をマスターすると、Javaのプログラミングスキルの基礎が固まります。計算処理や条件分岐など、プログラムの核となる部分を自由に書けるようになるでしょう。
ぜひ今回の記事をきっかけに、更なるステップアップにつなげてください。