2016-11-12 10 views
1

私はJavaプログラミングにとって比較的初心者です。したがって、これが単純であると思われる場合は事前にお詫びしますが、わかりません。オブジェクトのリスト緩いプロパティ値

私は、次のコードを持って次のように

記事は、クラスです:

パブリッククラス条{

private String title; 
private String author; 
private List<String> tags; 

記事のArrayListのを作成するために意図された私のメインのコードはようです次のとおりです。

List<Article> myArticles = new ArrayList<Article>(); 
    List<String> myTags = new ArrayList<String>(); 

    String title; 
    String author; 

    title = "Pillars of the Earth"; 
    author = "Ken Follet"; 
    myTags.add("fiction"); 
    myTags.add("historical"); 
    myTags.add("best seller"); 

    myArticles.add(new Article(title, author, myTags)); 

    System.out.println(myArticles.get(0).toString()); 

    title = "Programming with java"; 
    author = "Louw Pieters"; 
    myTags.clear(); 
    System.out.println("myTags size : "+myTags.size()); 
    myTags.add("java"); 
    myTags.add("programming"); 
    myTags.add("best seller"); 

    myArticles.add(new Article(title, author, myTags)); 

    for (Article myItem : myArticles) { 
     System.out.println(myItem.toString()); 
    } 

次の出力:

条[タイトル=地球、著者=ケン・フォレットの柱、タグ= [フィクション、歴史的、ベストセラー]]は

辞myTagsサイズ:0

条[タイトル=つの柱[著者:Louw Pieters、tags = [Java、プログラミング、ベストセラー]] [著者:Ken Follet、タグ= [Java、プログラミング、ベストセラー]

なぜリストに保存された最初の記事オブジェクトのタグが変更されたのですか?私はそれがリストの中で「保護されている」と思った?

助けてください。

答えて

0
private List<String> tags; 

タグは、Articleクラスのインスタンスのフィールドとしてタグを定義します。つまり、タグが値を受け取ったときに、値を受け取ったオブジェクトは、生存している(ガベージコレクションされていない)限り、その値の参照を保持します。

ですから、

List<Article> myArticles = new ArrayList<Article>(); 

を持っているにもかかわらず、それは記事のインスタンスがリストに入れられたときに、タグ要素が保護されることを意味するものではありません。 Listには、追加された各要素の参照も保持されます。

myTags.clear(); 

あなたはactualy 2番目の記事を作成し、そのコンストラクタで同じ参照変数辞myTagsを使用すると最初の記事 に関連付けられたタグを空に:あなたが関連付けられているあなたは、この命令を使用するので、

第二の物品との辞myTagsだけでなく、タグを変更した後、両方の記事は、今あなたがこれを避けたい場合は、タグ

の同じリストを表示し、代わりの

されている理由です0

使用

myTags = new ArrayList<>(); 

そして予想通り、今あなたが第二の記事、最初のインスタンスへの参照を保持している最初の記事にdifferenteインスタンスを関連付けるため、それが動作します。

+0

ありがとうございました!私はあなたの提案を試みましたが、今はうまくいきます。 –

+0

@ Louw Pieters、それは助けてうれし:) – alainlompo

関連する問題