2010-11-19 1 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가 인쇄 될 것이라고 생각했습니다. 하지만 분명히 실제는 테스트 내부의 객체에 대한 참조입니다. 나는 실제 결과를 테스트에 "넣어야"한다는 인상을 받았다. 실제가 참조인지 여부에 대한 권위있는 문서가 있습니까?Hashtable 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 등등. 이 신화를 퍼터로 쓰지 마십시오. –