値型(プリミティブ型、基本データ型)と、参照型(オブジェクト型)の違い
値型(プリミティブ型) 基本データ型 |
参照型 (オブジェクト型) |
|
---|---|---|
型 | intとか | Integerとか |
頭文字 | 小文字 | 大文字 |
特徴 | ・変数に「値」そのものを持つ ・変数のサイズ(bit)が決まっている ・既定サイズを超える値を格納することはできない ・適切な型を使わないと無駄にメモリを使う ・何のメソッドも持たない (「int.メソッド名」とかのドット演算子でメソッドを呼び出せない) ・オブジェクトではなく単なる値 |
・変数には「値」そのものではなく、値がメモリのどこに格納されているかを示す「参照値」が格納される |
※基本データ型=値型(プリミティブ型)
↑言い方が違うだけで同じもの
ラッパークラス(wrapper class、プリミティブラッパークラス)
値型(プリミティブ型)の特徴に
何のメソッドも持たない
オブジェクトではなく単なる値
があった
しかし
プログラムの中では値型(プリミティブ型)の値に対する操作(文字列との相互変換など)が必要になる場面がたくさんあり、このままだと困るヽ(´Д`; ≡ ;´Д`)丿オロオロ
_人人人人人人_
> そこで <
 ̄Y^Y^Y^Y^Y ̄
Javaは値型(プリミティブ型)の補助的な役割として値をオブジェクトとして扱えるように、ラッパークラスを用意している
↓こうゆうやつ
Integer.valueOf(int i); // 指定されたint型を表すIntegerクラスのインスタンスを返す
表1 プリミティブ型と対応するラッパークラス
値型(プリミティブ型) | ラッパークラス |
---|---|
byte | java.lang.Byte |
short | java.lang.Short |
int | java.lang.Integer |
long | java.lang.Long |
char | java.lang.Character |
float | java.lang.Float |
double | java.lang.Double |
boolean | java.lang.Boolean |
meが間違えたこと
誤:ラッパークラスは、オブジェクト型を定義している正:ラッパークラスは、参照型(オブジェクト型)に分類される
値型(プリミティブ型)の進化系クラス
値型と参照型を実装で見てみると
以下の①②③は同じ意味
①Integer test = 1; // 「1」はたぶんint型
↑ ・String型はコレ
・コンストラクタを使ってインスタンスの作成をしているの(←②の書き方)と同じことをしている
②Integer test = new Integer(1); // コンストラクタを使ってインスタンスの作成をしている
↑このコンストラクタを使って宣言をする方法は、Java9から非推奨となり、静的メソッド(←③の書き方)を使うことが推奨されている
③Integer test = Integer.valueOf(1); // 静的メソッド、「1」はint型
↑静的メソッド=newでインスタンスを作らなくても使える
参考資料
↓
コンストラクタ
Integer(int value)
非推奨。
このコンストラクタを使用することはめったに適切ではありません。 静的ファクトリvalueOf(int)は、より良い選択肢です。スペースと時間のパフォーマンスが大幅に向上する可能性が高いためです。
Java本格入門
~モダンスタイルによる基礎からオブジェクト指向・実用ライブラリまで
谷本心,阪本雄一郎,岡田拓也,秋葉誠,村田賢一郎 著、Acroquest Technology株式会社 監修
68、69頁