JVM如何处理引用变量



只想知道这个语句是否正确:

对于这些代码行:

Person Bob = new Person("Bob W.", 30);
System.out.println(Bob.name);

创建一个Object Person,并将其内存地址或某种引用发送给引用变量Bob。接下来,当我们调用"Bob.name"时,JVM会查看Bob持有的"地址",然后转到那里查看Person对象。然后JVM查看Bob的名字并打印出来!

谢谢!

Java中的所有对象都是通过它们的引用访问的(不同于基元访问!(。变量bob是对Person类的实例的引用。实例的内存分配/处置将由JVM处理,只要存在对该实例的强引用(即Person bob = new ...声明对新创建的Person实例的强参考(,实例数据就会由JVM保持活动状态。

创建一个Object Person,并将其内存地址或一种引用发送给Bob,即引用变量

更正确的说法是"创建了Person对象的实例",但是的,Java中用于对象的所有变量都是引用变量。调用new将返回对创建的实例的引用。可以有许多引用变量指向一个实例。例如,在下面的代码片段中,我们可以有两个指向单个实例的引用:

Person bob = new Person("Bob W.", 30);
Person bob2 = bob;

接下来,当我们调用"Bob.name"时,JVM会查看Bob持有的"地址",然后转到那里查看Person对象。

没错。编译代码后,JVM字节码将使用指令getfield访问name字段。此指令需要对象引用和字段引用。在这种情况下,bob.name将使用bob作为objectref并且使用Person#name作为fieldref

最新更新