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

Tru*_*ran 7 java memory

假设我们有一个班级:

    class Account {
      String name;
      int ID;
    }
Run Code Online (Sandbox Code Playgroud)

然后

a1 = new Account();

a2 = new Account();
Run Code Online (Sandbox Code Playgroud)

将创建2个变量,指向存储2个Account类实例的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的内存位置吗?

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

vik*_*eve 12

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

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