只是想知道这个说法是否属实:
对于这些代码行:
Person Bob = new Person("Bob W.", 30);
System.out.println(Bob.name);
创建一个对象 Person 并将其内存地址或一种引用发送给 Bob,即引用变量。接下来,当我们调用“Bob.name”时,JVM会查看Bob持有的“地址”,并去那里查看Person对象。然后 JVM 查看 Bob 的名字并打印它!
谢谢!
最佳答案
Java 中的所有对象都是通过其引用来访问的(与原始访问不同!)。变量 bob 是对 Person 类实例的引用。实例的内存分配/处置将由 JVM 处理,并且只要存在对该实例的强引用(即 Person bob = new ... ),实例数据就会由 JVM 保持 Activity 状态声明对新创建的 Person
实例的强引用)。
An Object Person is created and its memory address or a kind of reference is sent to Bob, the reference variable
更正确的说法是“创建了 Person 对象的实例”,但是,是的,Java 中用于对象的所有变量都是引用变量。调用new
将返回对所创建实例的引用。可以有许多指向单个实例的引用变量。例如,在下面的代码片段中,我们可以有两个引用指向单个实例:
Person bob = new Person("Bob W.", 30);
Person bob2 = bob;
Next, when we call "Bob.name", the JVM looks at the "address" held by Bob and goes there to look at the Person Object.
正是如此。代码编译后,JVM字节码将使用指令getfield
来访问name
字段。该指令需要对象引用和字段引用。在这种情况下,bob.name
将使用 bob
作为 objectref
并使用 Person#name
作为 字段引用
。
关于java - JVM 如何处理引用变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53137482/