Java如何为一个新实例(带有String属性)分配内存?

7

Assume we have a class:

    class Account {
      String name;
      int ID;
    }

那么

a1 = new Account();

a2 = new Account();

将创建2个变量,它们指向存储类Account的2个实例的2个内存位置。
我的问题是Java如何知道这些实例有多大以便分配它们的内存(因为对于String类型,我们可以给任何字符串赋值。例如,a1.name =“Solomon I”,a2.name =“Alan”。这将导致每个实例的大小不同)。
内存位置是一个“连续”的字节字符串。因此,如果我有a1 = new Account(),那么a2 = new Account() => a1的内存位置是固定的('used memory | a1 | a2'),那么如果我使a1.name成为一个非常长的字符串会发生什么?a1的内存位置会扩展到a2的内存位置吗?
感谢您阅读本文,请让我知道是否有任何误解。
2个回答

12

name 是一个字符串的引用(不是实际的字符串)。当你赋值时,它将“指向”一个字符串对象。

因此,在你的对象中,Java 只需要为字符串引用和 int 分配空间,这些大小是恒定的。


非常感谢。清晰的解释 ;) - Trung Tran

1
该对象只持有对其他对象(成员变量)的引用。因此,它的大小始终是固定的。因此,更改所引用对象的内容不会影响引用它的对象的大小。因此,您无需担心字符串大小,即使更改字符串,也不会影响“账户”类对象,因为只有字符串引用被“账户”类对象存储。
希望这能帮助您。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接