首页 > 解决方案 > JVM如何处理引用变量?

问题描述

只想知道这个说法是否正确:

对于这些代码行:

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

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

谢谢!

标签: javareferencejvm

解决方案


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用作objectrefPerson#name用作fieldref


推荐阅读