2017-03-25 7 views
1

なぜ最後のprint文のset1の値がこのコードによって変更されるのですか? Javaの引数が値渡しであったという印象を受けましたか?Javaで、このTreeSetが参照渡しであるのはなぜですか?

何か不足していますか?

import java.util.Set; 
import java.util.TreeSet; 


    public class Testing { 
     public static void main(String args[]) { 

     Set<String> set1 = new TreeSet<String>() ; 
     set1.add("A") ; 
     set1.add("B") ; 
     set1.add("C") ; 
     set1.add("D") ; 
     set1.add("F") ; 
     set1.add("G") ; 
     System.out.println("set1, the tree set: " + set1) ; 

     Set<String> set2 = new TreeSet<String>() ; 
     set2.add("B") ; 
     set2.add("D") ; 
     set2.add("E") ; 
     set2.add("F") ; 
     set2.add("G") ; 
     System.out.println("set2, the tree set: " + set2) ; 

     Set set3 = difference(set1, set2); 

     System.out.println("Difference: " + set1 + " - " + set2 
        + " = " + set3) ; 



    } 
    public static Set<String> difference(Set<String> x, Set<String> y) 
    { 

     x.removeAll(y); 

     return x; 
    }} 

答えて

0

あなたは値渡しという用語と混同しています。 valueとして渡されたセンス参照の値渡し。参照値が渡され、セットが有効になります。

1

Javaは値渡しですが、この場合渡す値はSetへの参照であるため、元のオブジェクトを変更できます。

+0

これはセット専用のケースですか?なぜなら、あなたがストリングと同じようなことをしていたら、これは起こらないからです。 – gencode

+1

@gencode文字列は不変です。 – Powerlord

関連する問題