ホーム > Java > 第3章-2 参照型変数

Java -参照型変数-

参照型変数も式の構成要素の1つとなります。また参照型変数が示すインスタンスのメンバ (メンバ変数、メソッド)も式の構成要素の1つです。

ただし、これらに対してどの演算子でも使用できるわけではなく、文字結合演算子(+)、等価演算子(==), 非等価演算子(!=)、instanceof、キャストなどが利用できます。

メンバの利用

参照型変数が参照するインスタンス内のメンバ(メンバ変数およびメソッド)は、それが基本データ型 の値を出力するものであれば、通常の基本データ型の演算子が利用できます。

しかし、参照型の値を出力する場合は、文字列結合演算子(+)、等価演算子(==)、非等価演算子(!=)、instanceofなどの 演算子に利用が限定されます。

---メモ---

すべてのオブジェクトはjava.lang.Objectクラスを継承するのでtoStringメソッドを持ちます。
一方の+演算子のオペランドが参照型であり、他のオペランドがString型の場合、toStringメソッドが自動的に実行され、 文字列を出力します。その場合デフォルトは、次のようになります。

参照型変数にnull値が代入されている場合
(メンバ変数など)
null
参照型変数は定義されているが初期化されていない場合
(ローカル変数)
コンパイルエラー
参照型変数が特定のインスタンスを参照している場合 クラス名@ハッシュコード値

文字列結合演算子(+)の利用

参照型に利用できる演算子ですが、厳密に言うと、文字列結合演算子が参照型のデータを扱えるのではなく すべての参照型が文字列に型変換をする機能を持っているので、文字列結合演算子が利用できるのです。

どのようなクラスであっても、そのクラスから生成したインスタンスはtoStringというメソッドを持ちます。
これは、java.lang.Objectというクラスで定義されたメソッドですが、すべてのクラスはObjectクラスを継承するため、 すべてのインスタンスでtoStringメソッドが利用できます。

toStringメソッドは、インスタンスの特定の値を文字列として返すメソッドです。
+演算子の右オペランドまたは左オペランドのいずれかが文字列である場合、もう一方に定義した参照型はtoStringメソッドが 自動的に実行され、文字列を出力します。
(両方のオペランドがともに参照型である場合は、文字列結合演算は使えません)

等価(==)、非等価(!=)の利用

等価、非等価演算子は、基本データ型だけでなく、参照型の場合にも利用できます。ただし、その場合は、右オペランドも 左オペランドも、ともに参照型である必要があります。

この場合の等価の判断とは、「参照型の変数に格納されているアドレス情報が等しいかの判断」であり 「インスタンスに格納されているデータどうしが等しいかの判断」ではありません。

equalsメソッドの利用

equalsメソッドは、Objectクラスで定義されているメソッドです。演算子ではありませんが、等価演算子と似た機能を持ちます。

equalsメソッドによる比較
参照型変数1.equals(参照型変数2)

デフォルトでは、参照型変数1に格納されているアドレス情報と、参照型変数2に格納されているアドレス情報が等しいかどうか、 すなわち2つの参照型変数が同じインスタンスを参照しているかどうかを判断します。

equalsメソッドと等価演算子の違いは、equalsメソッドではnullとの等価を判断できません。

[注意]
なお、Stringクラスでは、equalsメソッドがオーバーライドされており、等価演算子とは異なり、 格納されている文字列の値が同じかどうかをチェックします。