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

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

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

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

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

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

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

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

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

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

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

身長と好みの食べ物を表すフィールドを追加してみました。
それぞれのフィールドに関して値の取得と設定、値の表示を行うメソッドを追加しています。

そして、このクラスを使って実際に動作を行うサンプルプログラムも挙げておきます。内容は9章で説明する内容が含まれていますので、先に9章の内容を確認してからでお願いしますね。