こんにちは!侍エンジニアブログ編集部のシホです!
みなさんはデータ型をうまく使いわけられていますか?変数を宣言するときに変数名と同時に変数のデータ型を指定する必要がありますよね。
ですが、変数の種類や値の大きさによって使うデータ型が違うのでつまづく方も多いと思います。そこで今回は、
- データ型がそもそも何なのか
- 整数型の使い分け
- 最小値と最大値の出し方
- 練習問題
と実践できる形式で紹介していきたいと思います。ぜひマスターしてみてください!
なお、Javaの記事については、こちらにまとめています。
データ型とは?
まず、データ型の説明をします。データ型とは、データの種類のことをいいます。データには年齢のような数字を表す場合もあれば、名前などの文字を表す場合もあります。
また、数字の場合は小さい数字だけではなく、莫大な数字を表す場合もります。このように、Javaではデータの種類や大きさに合わせてデータ型が決まっています。
では、データ型はどのように分類されるのか見てみましょう。
種類 | データ型 | ビット数 | 値 |
---|---|---|---|
真偽値 | boolean | 1ビット | 真偽値,falseまたはtrue |
文字型 | char | 16ビット | Unicode文字 ¥u0000~¥uFFFF |
整数型 | byte | 8ビット | -128~127 |
short | 16ビット | -32768~32767 | |
int | 32ビット | -2147483648~2147483647 | |
long | 64ビット | -9223372036854775808~9223372036854775807 | |
浮動小数型 | float | 32ビット | 単精度浮動小数点数 |
double | 64ビット | 倍精度浮動小数点数 |
データ型には、真偽値を表すboolean、文字を表すchar、整数を表すbyte,short,int,long、浮動小数を表すfloat,doubleにわかれています。
データ型はそれぞれ扱われる値の範囲が決まっていて、表したいデータの種類と値によって適した型を使用します。
データの種類と大きさにあったデータ型を使用しよう!
整数型の特徴
では、整数型のbyte、short、int、longについて詳しくみてみましょう。整数型は、文字どおり整数を表したい時に使用します。
ただし、byteはデータの大きさを表すときに使います。整数を表したい時は、short,int,longを使いましょう。
この3つの違いは、表現できる値の範囲だけです。使用頻度は「int>long>short」となるので、基本はintを使って、intでまかなえない場合はlong、shortを使うという感じで覚えておけば大丈夫です。
・byteはデータの大きさを代入するときに使う
・short、int、longの違いは表現できる値の範囲だけ
・基本的にはint型を使う
型の最小値と最大値
では次に、型の最小値と最大値の出し方を紹介します。以下の表は、整数型ごとに最小値と最大値を取得する方法をまとめたものです。
MIN_VALUEで最小値、MAX_VALUEで最大値が取得できます。
整数型 | 最小値 | 最大値 |
---|---|---|
byte | Byte.MIN_VALUE | Byte.MAX_VALUE |
short | Short.MIN_VALUE | Short.MAX_VALUE |
int | Integer.MIN_VALUE | Integer.MAX_VALUE |
long | Long.MIN_VALUE | Long.MAX_VALUE |
では、int型最小値と最大値を確認してみましょう。
【コード】
//int型の最小値と最大値を確認する public class MinMaxValue { public static void main(String[] args) { System.out.println("intの最小値=" + Integer.MIN_VALUE); System.out.println("intの最大値=" + Integer.MAX_VALUE); } }
【結果】
intの最小値=-2147483648 intの最大値=2147483647
練習問題
問題
int型の最小値、最大値の確認を参考にして、
byte,short,long型の最小値と最大値を出してみよう!
答え
【コード】
//byteの最小値と最大値 public class MinMaxValue { public static void main(String[] args) { System.out.println("byteの最小値=" + Byte.MIN_VALUE); System.out.println("byteの最大値=" + Byte.MAX_VALUE); System.out.println("shortの最小値=" + Short.MIN_VALUE); System.out.println("shortの最大値=" + Short.MAX_VALUE); System.out.println("longの最小値=" + Long.MIN_VALUE); System.out.println("longの最大値=" + Long.MAX_VALUE); } }
【結果】
byteの最小値=-128 byteの最大値=127 shortの最小値=-32768 shortの最大値=32767 longの最小値=-9223372036854775808 longの最大値=9223372036854775807
型の変換について
ここまででJavaの整数型について、一通り理解が深まったのではないでしょうか。それぞれ保持できるデータの種類や大きさが違うことがわかりましたね。
しかしこれらの型を使用していく上で、型を変換しなければならないケースや違う型同士で計算をしたりすることも発生するでしょう。
その際どのような挙動をするのかを理解しておくことは非常に重要ですよ!以下のリンクで様々なケースでの型変換を扱っています。ぜひ読んでみてください。
最大値を超えたらどうなるの?
型の最大値を超えてしまった場合いったいどうなってしまうのか?気になる人も多いのではないでしょうか。
実際試してみましょう。先ほど使用した最大値を取得する「Integer.MAX_VALUE」。これで最大値を取得し、さらに1を足したらどうなるでしょうか?
【コード】
int i = Integer.MAX_VALUE; System.out.println(i + 1);
【結果】
-2147483648
実行すると、結果はマイナスになってしまいました!最大値「2147483647」から、いってん「-2147483648」とint型の最小値になってしまいましたね。
これを桁溢れやオーバーフローと呼びます。数字の最大値を超えて、一周回って最低値になってしまうわけです。
逆に最低値からさらに1を値を引いたら、最大値になってしまいます。(こちらはアンダーフローと呼ばれています)不具合の元にもなりますので注意しましょう。
まとめ
いかがでしたでしょうか。データ型は扱える値の範囲が決まっています。
変数に整数を代入したいときは、データの種類と大きさにあった整数型を使用しましょう!
整数型の範囲がわからなくなったときは、ぜひこの記事を参考にしてみてくださいね!