我看到数组引用指向数组[0]的内存地址。对象变量的内存地址指向什么?ie car c1=新车(“雪佛兰”、“塔霍”);我想它可能指向第一个示例变量,但这没有意义b/c可以有不带示例变量的类。
tgabmvqs1#
对象变量的内存地址指向什么?对象只是一块内存。在java的典型实现中,该块是称为堆的更大范围内存的一部分。究竟是什么组成了对象的结构,它的特定位和字节对于我们普通的java程序员来说并不重要。对象的结构是如何在内存中布局的,这是一个与我们无关的实现细节。ie car c1=新车(“雪佛兰”、“塔霍”);这里涉及两个步骤。作业的右侧 = 示例化对象。这意味着堆中有一块内存。传递给构造函数的值将写入该内存中的成员字段中。作业的左侧 = 获取新创建的对象的位置并将其分配给名为 c1 . 如果 c1 是一个局部变量,它存在于堆栈中,在java的典型实现中。在java中,我们永远看不到实际的内存地址。在代码中,例如 c1.model ,我们相信jvm会找到 c1 在堆栈上,使用其内部维护的内存地址来访问特定的 Car 对象,然后在该对象分配的内存块中导航以检索名为的成员字段的值 model .
=
c1
c1.model
Car
model
1条答案
按热度按时间tgabmvqs1#
对象变量的内存地址指向什么?
对象只是一块内存。在java的典型实现中,该块是称为堆的更大范围内存的一部分。
究竟是什么组成了对象的结构,它的特定位和字节对于我们普通的java程序员来说并不重要。对象的结构是如何在内存中布局的,这是一个与我们无关的实现细节。
ie car c1=新车(“雪佛兰”、“塔霍”);
这里涉及两个步骤。
作业的右侧
=
示例化对象。这意味着堆中有一块内存。传递给构造函数的值将写入该内存中的成员字段中。作业的左侧
=
获取新创建的对象的位置并将其分配给名为c1
. 如果c1
是一个局部变量,它存在于堆栈中,在java的典型实现中。在java中,我们永远看不到实际的内存地址。在代码中,例如
c1.model
,我们相信jvm会找到c1
在堆栈上,使用其内部维护的内存地址来访问特定的Car
对象,然后在该对象分配的内存块中导航以检索名为的成员字段的值model
.