Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java如何为新实例分配内存(使用字符串属性)?_Java_Memory - Fatal编程技术网

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();