3
3

More than 1 year has passed since last update.

/*Java入門*/ intとIntegerの違いから

Last updated at Posted at 2022-01-27

intとIntegerの違い

簡単に言えば:

  • intはプリミティブ型(primitive type)、Integerは参照型(reference type)
  • Integerはintのラッパークラス(wrapper class)

プリミティブ型とは

Javaには8種類の組込み型(built-in data types)があり、プリミティブ型(primitive type)と呼ばれます。
また、各プリミティブ型には対応しているラッパークラスがあります。

説明 範囲 例  ラッパークラス
boolean 真偽値  true / false true java.lang.Boolean
byte 8bit整数値 -128 ~ 127 123 java.lang.Byte
short 16bit整数値 -32768 ~ 32767 123 java.lang.Short
int 32bit整数値 -2147483648 ~ 2147483647 123 java.lang.Integer
long 64bit整数値 $-2^{63} \sim 2^{63}-1 $ 123L java.lang.Long
float 32bit浮動小数点値 絶対値範囲 $2^{-149} \sim (2-2^{-23})*2^{127}$ 123.45f java.lang.Float
double 64bit浮動小数点値 絶対値範囲 $2^{-1024} \sim (2-2^{-52})*2^{1023}$ 123.45 java.lang.Double
char 16bit Unicode値 \u0000 ~ \uffff $\Leftrightarrow$ 0 ~ 65535 'a' java.lang.Character
  • プリミティブ型はメモリ上にただの値です。
  • 全てのJavaオブジェクトはプリミティブ型の複合です。

参照型とは

参照型(reference type)はオブジェクト(クラスのインスタンス)を参照(refer to)するデータの型(type of data)です。
参照(reference)はオブジェクトの所在場所のメモリアドレスを保存することによってこのオブジェクトを指しています。

参照型にはnullを割り当てる(assign)ことができますが、プリミティブ型にはできません。

Test.java
public class Test {
	public static void main(String[] args) {
		String str = null; // str does not currently refer to an object
		int num = null; // DOES NOT COMPILE
	}
}
result
 % javac Test.java
Test.java:4: エラー: 不適合な型: <null>をintに変換できません:
		int num = null;
		          ^
エラー1個

Integerを使う

Integerはintに対応しているオブジェクト型なので、nullを割り当てることやメソッドを呼び出すことができます。
ここで、Oracle公式ドキュメントを読むのがおすすめです→Integer日本語, Integer英語

Test.java
import java.lang.Integer;

public class Test {
	public static void main(String[] args) {

		// フィールド
		System.out.println("Integerはプリミティブ型" + Integer.TYPE + "のラッパークラスです");
		System.out.println("Integer値を表すビット数は:" + Integer.SIZE);
		System.out.println("Integer値を表すバイト数は:" + Integer.BYTES);
		System.out.println("Integer値に設定可能な最大値は:" + Integer.MAX_VALUE);
		System.out.println("Integer値に設定可能な最小値は:" + Integer.MIN_VALUE);

		// int, Integer, Stringの間の変換
		// int -> Integer
		// Integer notGood = new Integer(123); // NOT RECOMMENDED
		Integer num0 = Integer.valueOf(123);
		Integer num1 = 123; // autoboxing

		// String -> Integer
		Integer num2 = Integer.valueOf("123");
		// Integer bad0 = Integer.valueOf("12.3"); // throws NumberFormatException

		// Integer -> int
		int num3 = num0.intValue();
		
		// String -> int
		int num4 = Integer.parseInt("123"); 
		// int bad1 = Integer.parseInt("12.3"); // throws NumberFormatException

		// int -> String
		String numStr0 = Integer.toString(123);

		// Integer -> String
		String numStr1 = num0.toString();
	}
}
result
% javac Test.java
% java Test      
Integerはプリミティブ型intのラッパークラスです
Integer値を表すビット数は:32
Integer値を表すバイト数は:4
Integer値に設定可能な最大値は:2147483647
Integer値に設定可能な最小値は:-2147483648
3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3