🍣

intとIntegerの違いって何?in Java

2022/01/12に公開

最初に結論

どっちも-2147483648~2147483647の範囲にある整数値を保持するための32ビットの変数型
違うのはint型はnullが許されない一方でInteger型は許容されること。
またint型はプリミティブ型である一方Integer型はオブジェクト型である。
※プリミティブ型は値(1,true,'a'など)でメモリに直接格納でき、オブジェクト型は別にヒープ領域というところにメモリを確保する。

どう使い分けるの?

計算、出力で使うときは基本的にint型で良いと思います。
ただ数値を別のデータ型(long,shortなど)に変換する必要が出てくる場合はそれらがインスタンスメソッドとして実装されているので、Integer型として持った方が良いかもしれないですね。
あとはジェネリクス型を定義する時、nullを許容するときくらいでしょうか??

変換

でもInteger型のListの要素をint型の変数に代入することあるよね?型違うじゃん!と思われた方もいると思います。
プリミティブ・オブジェクト間の変換は自動で行われます。これをオートボクシングと呼びます。

zenn.java
Integer numInteger = new Integer(1);
//自動でInteger->intへ変換される。
int numInt = numInteger;

なおInteger型はnullを許容しているためそれをint型へ代入しようとするとエラーになりますので気を付けましょう😶

まとめ

なんでプリミティブ型とオブジェクト型が存在するんでしょうか。
すべてがオブジェクトであるRubyから学習を始めた自分としては中々慣れません。
プリミティブ型の場合は値を直接メモリに格納出来るからとかだろうか??

Discussion