2013-03-13 40 views
7

假设我们有一个类:Java如何为新实例(使用String属性)分配内存?

class Account { 
     String name; 
     int ID; 
    } 

然后

a1 = new Account(); 

a2 = new Account(); 

将创建2个变量指向2个存储类账户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的内存位置?

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

回答

12

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

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

+0

非常感谢。清楚的说明;) – 2013-03-13 12:16:00

1

该对象只是持有对其他对象(成员变量)的引用。所以它的大小将永远是固定的。所以改变引用对象的内容不会影响引用它的对象的大小。 因此,即使您更改字符串,您也不必担心字符串大小,并且您的'Account'类对象不会受到影响,因为只有String引用由'Account'类对象存储。

希望这对你有所帮助。

+0

谢谢。我明白了;) – 2013-03-13 13:16:41

+0

不客气。 :) – 2013-03-15 18:40:14