Emp e = new Emp();
クラスすなわちをインスタンス化するとき、ハンドルが、それはメモリ内のオブジェクトのアドレスを格納していないポインタすなわちない変数eに格納されていること。サイト(http://www.rajeshpatkar.com/articles/javarefpnt/)で読みます
説明は、ポインタの配列の例を示します。メモリアドレスは[1]の位置に格納され、オブジェクトが移動されると、この位置は新しいアドレスで更新されます。
なぜこの配列ではなく、オブジェクトが移動したときに、直接アドレス(それがGCに役立つと述べているが、私はそれを理解していなかった)、それを更新する(電子に格納されたアドレス)を格納するのに使用されますか?
私はこれを理解するのにかなりの時間を費やしましたが、それでも私を満足させる答えは見つかりませんでした。 変数 'e'に実際に何が格納されているかを説明することができれば(例で)、静かに役立ちます。
感謝:)
大きな説明メイト。私はついにハンドルのコンセプトを理解しました。ポインタの配列例を続けると、すなわち、 'e'(参照変数)はa [1]を指し、これは順番に(すなわち、[1])オブジェクトのアドレスを記憶する。さらに、私はeの値を変更できないことを知りました。すなわち、eの点をjavaの[5]または他のメモリにすることはできません。内容[a]に格納されている値だけを変更できます。なぜこれがJavaの理由なのですか?つまり、Javaの他の場所に 'e'を付けることができないのはなぜですか?許可する可能性のあるリスクは何ですか? –
@JayeshSaita:喜んで助けました。 * "...さらに、私は 'e'の値を変更することができないことを知りました..." *はい、できます: 'e = someOtherObject;' JVMの実装方法に慣れないでください。ちょうど:変数は値を格納します。参照型変数に格納される値はオブジェクト参照です。その値は、オブジェクトがどこにあるかをJVMに伝えます。 :-) –