Javaの型はプリミティブ型と参照型の2種類に分類されます。この紹介です。
- プリミティブ型(基本データ型)
- 変数はデータそのものを表し、振る舞いは持ちません
- 例: byte, short, int, long, float, double, char, boolean
- 参照型
- 変数はオブジェクトをッシ示す参照が代入されます
new
を用いてインスタンスを作成する必要があります- 例: Byte, Short, Integer, Long, Double
🗽 デフォルト初期値
インスタンスフィールド変数と配列構成要素は型に応じて初期値を持ちます。
オプション | 説明 |
---|---|
参照型 | null |
boolean |
false |
char |
¥u0000 |
byte, short, int, long |
0 |
float, double |
0.0 |
ローカル変数の場合はデフォルト初期値を持たず、未初期化の変数を使うとコンパイルエラーになります。
🎂 参照型と変数の関係
参照型では変数はオブジェクトの参照(オブジェクトの位置情報)を持ち、変数の名前でオブジェクトにアクセスできます。
下図は概念図です。
出典:改訂2版 パーフェクトJava
🍄 変数の型とオブジェクトの型の規則
変数の型はその変数が参照するオブジェクトに対してどんな操作ができるかを確定します。
オブジェクトの型は呼ばれた先の実際の動作を確定します。
- 変数とオブジェクトの型が一致していれば、オブジェクトの参照を変数に代入できる
- 変数が参照するオブジェクトに対して行える操作は変数の型で決まる
- P型と継承したC型の場合、P型の変数にC型のオブジェクトの参照を代入できる
- C型のオブジェクトはP型のもつメソッドがあることを保証する
出典:改訂2版 パーフェクトJava
🗻 Nullチェック関連メソッド
オプション | 説明 |
---|---|
boolean equals(Object a, Object b) |
引数のどちらかがnull でも使える同値比較 |
String toString(Object o, String nullDefault) |
null の場合指定した文字を返す |
boolean isNull(Object o) |
引数がnull のときに真 |
boolean nonNull(Object o) |
引数がnull でないときに真 |
T requireNonNull(T obj) |
引数がnull だと即座にNullPointerException を発生 |
🤔 オートボクシング / アンボクシング
プリミティブ型からラッパの参照型への自動変換を「オートボクシング」と呼びます。
int intNumber = 10; |
逆にラッパの参照型からプリミティブ型への自動変換を「アンボクシング」といいます。
Integer integerNumber = new Integer(10); |
🚜 参照型にはnullが入る可能性がある
参照型の特徴のひとつとしてnull
をもつことができます。プリミティブ型はnull
をもつことができません。
Integer integerNumber = null; |
🚕 参照型オブジェクトの比較
比較演算子は変数のデータをもとに比較を行うため、参照型の参照アドレスでは比較演算子による比較ができません。
参照型オブジェクトの比較には、Object#equals()
とObject#hashCode()
を用います。
Object#equals()
: オブジェクトどうしを比較し、同じかを判断するObject#hashCode()
: オブジェクトを一意に表す整数型を生成する
🐝 プリミティブ型(基本データ型)の型変換
暗黙型変換
byte値をint型に代入したり、float値をdouble型に代入する場合、暗黙的に型変換が行われます。
扱える範囲の大きな型に変換する場合は暗黙的に行うことができます。
byte => short => int => long => float => double |
キャストによる型変換
int型をbyte型の変数に代入したり、double値をfloat型の変数に代入する際はキャスト(変換したい型) 変数
が必要です。
double => float => long => int => short => byte |