7

假设我们有一个类:

    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 = new Account() => a1 的内存位置是固定的('used memory | a1 | a2')那么如果我将 a1.name 设为一个非常长的字符串会发生什么?a1 的内存位置会延伸到 a2 的内存位置吗?

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

4

2 回答 2

12

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

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

于 2013-03-13T11:24:36.447 回答
1

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

希望这对您有所帮助。

于 2013-03-13T12:49:17.580 回答