Javaコラム Javaエンジニアのためのお役立ちコラム

Javaのint型を基本から解説します|Integerクラスの便利な機能を知ろう

 
Javaのint型を基本から解説します|Integerクラスの便利な機能を知ろう
SE
Javaのintとはどのようなものなのでしょうか。
PM
Javaのint型はプリミティブ型(基本型)で最も多く使用される整数の数値型です。

Javaのintとは?

Javaのint型はプリミティブ型(基本型)で最も多く使用される整数の数値型です。Javaで数値を扱う時はとりあえずint型にするのが普通で、Javaのソースコードでint型を見かけないことはまずありません。

int型のサイズは32bitで、2,147,483,647から-2,147,483,648までの範囲の値を扱えます。21億ほどあるので桁あふれはまずありませんが、非常に大きな値を扱う場合は約922京まで扱える64bitのlong型を使用する必要があります。

int型の基本的な使い方

Javaのint型は以下のように、int型で変数を宣言して代入したり、配列を宣言して代入するといった使い方をします。

int val = 100;
int[] ary = new int[10];
ary[0] = 10;
ary[1] = 11;

int型に代入する値は普通に記述すると10進数ですが、以下の様に2進数・8進数・16進数、桁区切りの記述もできます。

int i2 = 0b1001; // 2進数(先頭に0b)
int i8 = 04567; // 8進数(先頭に0)
int i16 = 0xabcdef; // 16進数(先頭に0x)
int ik = 111_222_333; // 桁区切り(_で区切る)

クラスフィールドは0で初期化される

Javaの変数はint型に限らず初期化する必要があります。以下のようにローカル変数を初期化せずに使おうとするとコンパイルエラーになります。

int i; // 初期化していない
System.out.println(i);

ただしクラスフィールドの場合は、初期化をしていないと自動的に0で初期化されます。

class TestClass {
int val;
int[] ary = new int[10];
public class Main {
public static void main(String[] args)

{TestClass c = new TestClass();
System.out.println(c.val + “” “” + c.ary[0]); } }

実行結果は以下のようになります。newで生成した時に0で初期化されていることがわかります。

0 0

intでは小数点以下は切り捨てられる

int型の変数に別の型の値を入れる時は(int)でキャストします。この時、float型やdouble型などの少数を入れた場合、int型は整数しか扱えないため、小数点以下は切り捨てられます。以下のJavaサンプルをご覧ください。

float f = 3.14f;
double d = 3.14;

int a = (int)f;
int b = (int)d;

System.out.println(a + “” “” + b);

実行結果は以下になります。.14は切り捨てられてしまっています。

3 3

int型の桁あふれに注意する

int型はかなり大きい値を扱えますが、それでも桁あふれの可能性は常にあります。以下のJavaサンプルのように、int型で扱える正の最大値より1つ大きな値を代入したらどうなるのでしょうか。

long l = 2147483647L + 1L;
int i = (int)l;

System.out.println(i);

実行結果は以下になります。

-2147483648

int型の最小値になってしまっています。最大値を超過してしまうと、最小値になってしまうのです。逆に最小値よりさらに小さくなった場合は、最大値になります。int型を使う場合は、int型の範囲で問題がないか注意しましょう。

String文字列からint型への変換

Stringの文字列をint型の数値に変換したい時は、Integerクラスを使用します。以下のようにすれば変換できます。

int val = Integer.parseInt(“”123″”);
System.out.println(val);

なお文字列に数字ではない文字が含まれると、NumberFormatExceptionが発生します。以下のような16進数表記でも同様に発生します。文字列の数字変換はtry~catchで囲んでおきましょう。

try {
int val = Integer.parseInt(“”0x123″”);
System.out.println(val);
}
catch (Exception e) {
e.printStackTrace();
}

int型からString文字列への変換

int型の数値からStringへの変換は、Integer.toStringかString.valueOfで変換できます。以下のJavaサンプルをご覧ください。

String str1 = Integer.toString(123);
String str2 = String.valueOf(456);
System.out.println(str1 + “” “” + str2);

実行結果は以下になります。

123 456

int型の数値をカンマ区切り表示

DecimalFormatクラスやString.formatでint型の数値をフォーマットすることができます。以下のJavaサンプルをご覧ください。なお実行する場合はソースの先頭に「import java.text.DecimalFormat;」が必要です。

int val = 111222333;
DecimalFormat dform = new DecimalFormat(“”#,###””);
System.out.println(dform.format(val));
System.out.println(String.format(“”%,d””, val));

実行結果は以下のようになります。3桁毎のカンマ区切りができています。

111,222,333
111,222,333

int型の数値を右詰めで表示

また、以下のようにすれば右詰めや0埋めもできます。11という数字は全体が11桁と言う意味です。

System.out.println(String.format(“”%11d””, val));
System.out.println(String.format(“”%011d””, val));

実行結果は以下になります。

111222333
00111222333

int型の値を中に持てるIntegerクラス

Javaにはint型の数値を中に保持してラップすることができるIntegerクラスがあります。使用例は以下の通りです。

Integer iObj = Integer.valueOf(123);
int val = iObj.intValue();
System.out.println(val);

実行すると以下のようになります。123という値を持つiObjを生成し、そこからintValueメソッドでint型の値を取り出しています。

123

オートボクシングでIntegerをスマートに生成できる

Javaにはオートボクシングという、=で代入するだけで基本型をラップするクラスを生成する機能があります。上のサンプルのInteger.valueOfをコールしている箇所を、以下のように変えても同様に動作します。

Integer iObj = 123;

Integerの様なクラスは何のためにあるのでしょうか。その理由の一つは、intのような基本型にnullの状態を持たせるためです。「無い」と言う状態をint型で示すことはできません。0や-1という数字にも意味があるからです。

しかしIntegerのnullなら、存在しないという状態を作り出せます。

Integerクラスの便利な機能

またIntegerクラスには様々な便利な機能があります。よく使うのは以下のMAX_VALUEとMIN_VALUEでしょう。

System.out.println(Integer.MAX_VALUE+”” “”+Integer.MIN_VALUE);

実行結果は以下になります。

2147483647 -2147483648

int型の最大値と最小値をそのまま使うよりも、こちらの方が意図が明確になります。他には以下のように与えられた数値を16進数の文字列にする機能もあります。

System.out.println(Integer.toHexString(65535));

実行結果は以下になります。

ffff

SE
Javaのintについてよく理解できました。
PM
intは初心者の人でも知っていることが多い数値型ですが、再確認のために復習するのも大切なことですね。

intはJavaの基本中の基本なのでしっかりマスターしよう

Javaのintについて解説しましたが、ご理解頂けましたでしょうか。

初心者の人でも知っていることが多かったと思いますが、知らないこともあったはずです。int型はJavaの基本なので隅々まで把握しておきましょう。


Javaでのキャリアアップをお考えの方は、現在募集中の求人情報をご覧ください。

また、直接のエントリーも受け付けております。

エントリー(応募フォーム)

Search

Popular

recommended

Categories

Tags