2013-03-13 37 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