下記のプログラムのようにします。

実行結果は、


p1さんの体重
45.0
p2さんの体重
67.0
p1さんのおやつ
400gのケーキを4個食べます
p2さんのおやつ
200gのケーキを1個食べます
200gのケーキを1個食べます
200gのケーキを1個食べます
200gのケーキを1個食べます
200gのケーキを1個食べます
p1さんの体重は46600.0gです
46.6
p2さんの体重は68000.0gです
68.0

となります。

このプログラムの実行結果は、

p1とp2は等しくありません

と表示されます。
つまり、p1 == p2 の結果はfalseとなります。

これを解説すると、変数p1もp2もPersonクラスの参照型となっています。この場合だと、比較して等しくなるのは、それぞれが同じオブジェクトを参照している場合に限られます。
変数p1とp2はそれぞれオブジェクトを生成していますので、結果として別々のオブジェクトを参照しています。
よって、p1とp2を比較すればfalseとなります。

  • クラスとオブジェクトは同じものでしょうか?考えてみましょう。

結論から言えば違う物です。

クラスによって、フィールドとメソッドの存在が示されますが、具体的にどんなフィールドの値が格納されているかはクラスでは扱うことはできません。

よって、特定のクラスに対するオブジェクトを生成させてフィールドの値を格納することになります。

つまり、1つのクラスに対して複数のオブジェクトが存在する可能性があります。
また、クラスとオブジェクトの関係は例えて言うならば、クラスが設計図であり、オブジェクトはその設計図に従って製作されたものと考えることができます。

  • 参照型とはどんな型なのか、人に説明できるように考えてみましょう。

参照型はオブジェクトがメモリのどこに格納されているかについての情報が格納されます。
オブジェクトの持つフィールドにアクセスするには必ず参照型を経由してアクセスする必要があります。
言い換えると、あるクラスに対して生成されたオブジェクトは参照型という型による変数によってその存在を扱うことができます。