クラス型変数とその内容
public class Main { public static void main(String[] args) { ① Hero h; ②、③ h = new hero; ④ h.hp = 100; } }
①Hero型変数の確保 JVMは「Hero型の変数h」をメモリ内に確保する。 この時点ではHero型のインスタンスだけを中に入れることができる Hero型の箱が準備されるのみ。
②Heroインスタンスの生成 JVMはインスタンスに必要なメモリを確保する。 ※今回は仮に「3922番地から3945番地」とする
③参照の代入 h = new hero;で代入される右辺の実行結果(new hero;)は、 newによって生成されるインスタンスのために確保されたメモリの先頭番地である。 今回、インスタンスが「3922番地から3945番地」に生成されている為、 変数hには3922という数値が代入される。
変数hに入っているアドレス情報を参照という。
配列型と考え方は同じである。 このことからクラス型と配列型は総称して参照型と呼ばれる。
参照の解決(アドレスの解決)
変数から番地情報を取り出し、次にその番地にアクセスするという JVMの動作を参照の解決やアドレス解決と呼ぶ。
④フィードへの値の代入 メモリ内の3922番地にあるインスタンスのメモリ領域にアクセスし、 その中のhpフィールド部分を100 に書き換える。