Java如何为新实例分配内存(使用字符串属性)?
假设我们有一个类:Java如何为新实例分配内存(使用字符串属性)?,java,memory,Java,Memory,假设我们有一个类: class Account { String name; int ID; } 然后 将创建2个变量,指向存储类Account的2个实例的2个内存位置 我的问题是Java如何知道这些实例分配内存的大小(因为使用字符串类型,我们可以为其分配任何字符串。例如,a1.name=“Solomon I”,a2.name=“Alan”。这将导致每个实例的大小不同) 内存位置是字节的“连续”字符串。因此,如果我有a1=new Account()那么a
class Account {
String name;
int ID;
}
然后
将创建2个变量,指向存储类Account的2个实例的2个内存位置
我的问题是Java如何知道这些实例分配内存的大小(因为使用字符串类型,我们可以为其分配任何字符串。例如,a1.name=“Solomon I”,a2.name=“Alan”
。这将导致每个实例的大小不同)
内存位置是字节的“连续”字符串。因此,如果我有a1=new Account()
那么a2=new Account()=>a1的内存位置是固定的('used memory | a1 | a2'),那么如果我将a1.name设为一个很长的字符串会发生什么?a1的内存位置会扩展到a2的内存位置吗
感谢您阅读本文,如果我有任何误解,请告诉我。
name
是字符串引用(不是实际字符串)。分配字符串对象时,它将“指向”该字符串对象
因此,作为对象的一部分,java只需要为字符串引用“分配”空间,再加上一个大小恒定的int。对象只保留对其他对象(成员变量)的引用。所以它的大小总是固定的。因此,更改引用对象的内容不会影响引用它的对象的大小。 因此,您不必担心字符串大小,即使更改字符串,您的“Account”类对象也不会受到影响,因为“Account”类对象只存储字符串引用
希望这对您有所帮助。非常感谢。解释清楚;)非常感谢。我明白了;)
a1 = new Account();
a2 = new Account();