2010-11-19 13 views
0
Hashtable<String, Hashtable<String, HashSet<String>>> test = 
     new Hashtable<String, Hashtable<String, HashSet<String>>>(); 
test.put("1", new Hashtable<String, HashSet<String>>()); 
Hashtable<String, HashSet<String>> actual = test.get("1"); 
actual.put("3", new HashSet<String>()); 
//test.put("1", actual); 
HashSet<String> expected = test.get("1").get("3"); 
if (expected == null) { 
System.out.println("DIE");  
} 

上記のコードに基づいて、私はDIEが印刷されると思いました。しかし、明らかに、実際にはテスト中のオブジェクトへの参照はまだあります。私は、実際にテストに戻す必要があるという印象を受けました(コメントアウトされた行で示されています)。実績が参考であるかどうかについての権威ある文書はありますか?ハッシュテーブルget関数からの戻り値は参照ですか?

答えて

2

オブジェクトは常にJavaでは参照として渡されます。 chapter 4 of JLS

リファレンスタイプは、クラスタイプ、インターフェイスタイプ、および配列タイプです。 ...参照値(しばしば単に参照)は、これらのオブジェクトへのポインタです。

+0

-1000 - オブジェクトはJavaでは参照渡しされません。オブジェクト参照は値によって渡されます。これは非常に重要な違いです。 –

+0

あなたは正しいことを言おうとしていると思いますが、Javaでは「参照渡し」はありません。参照は値渡しとなります。 – ColinD

+0

http://javadude.com/articles/passbyvalue.htm http://www.javaworld.com/javaworld/javaqa/2000-05/03-qa-0526-pass.html http://www.yoda.arachsys .com/java/passing.htmlなど。この神話を解釈してはいけません。 –

関連する問題