2013-03-13 5 views
7

たちはクラスがあるとします。するとJavaは新しいインスタンス(Stringプロパティ付き)にどのようにメモリを割り当てますか?

class Account { 
     String name; 
     int ID; 
    } 

a1 = new Account(); 

a2 = new Account(); 

は、クラスアカウントの2つのインスタンスを保存する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のメモリ位置まで拡張されますか?

これを読んでいただきありがとうございます。誤解があれば教えてください。

答えて

12

nameは、文字列参照(しない実際の文字列)です。あなたがそれを割り当てるとき、それはStringオブジェクトを「指す」でしょう。

したがって、あなたのオブジェクトの一部として、Javaはサイズだけで一定である文字列の参照のためのスペースに加え、int型を、「割り当て」する必要があります。

+0

ありがとうございます。明確な説明;) –

1

オブジェクトは他のオブジェクト(メンバ変数)への参照を保持します。したがって、そのサイズは常に固定されます。したがって、参照されたオブジェクトの内容を変更しても、それを参照するオブジェクトのサイズには影響しません。 したがって、文字列サイズを心配する必要はなく、 'Account'クラスオブジェクトによってString参照のみが格納されるため、 'Account'クラスオブジェクトは文字列を変更しても影響を受けません。

これはあなたを助けてくれました。

+0

ありがとうございます。私は理解した;) –

+0

あなたは大歓迎です。 :) –

関連する問題