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

时间:2013-03-13 11:22:51

标签: java memory

假设我们有一个班级:

    class Account {
      String name;
      int ID;
    }

然后

a1 = new Account();

a2 = new Account();

将创建2个变量,指向2个存储位置,存储2个类Account的实例。

我的问题是Java如何知道这些实例分配内存的大小(因为对于String类型,我们可以为其分配任何字符串。例如,a1.name = "Solomon I", a2.name = "Alan"。这将导致每个实例的大小不同实例)

内存位置是一个'连续'字节串。因此,如果我有a1 = new Account(),则a2 =新帐户()=> a1的内存位置是固定的('used memory | a1 | a2')所以如果我将a1.name设为一个非常长的字符串会发生什么? a1的内存位置会扩展到a2的内存位置吗?

感谢您阅读本文,如果我有任何误解,请告诉我。

2 个答案:

答案 0 :(得分:12)

name是一个String引用(不是实际的字符串)。分配时,它将“指向”String对象。

因此,作为对象的一部分,java只需要为String引用“分配”空间,加上一个大小不变的int。

答案 1 :(得分:1)

该对象只保存对其他对象(成员变量)的引用。所以它的大小总是固定的。因此,更改引用对象的内容不会影响引用它的对象的大小。 因此,您无需担心字符串大小,即使更改字符串也不会影响您的“帐户”类对象,因为“帐户”类对象只存储字符串引用。

希望这对你有所帮助。