2011-08-26 5 views
1

죄송이 예에서 널 명확한 문을 이해할 수 없다, 내가하고 null 값을 할당하는 명확한 방법으로 목록 개체를 테스트이 불쌍한 내 영어에 대한

여기

코드

public class TestList { 
private List<String> list; 
private List<List<String>> mainList; 

public TestList(){ 
    list = new ArrayList<String>(); 
    mainList = new ArrayList<List<String>>(); 
} 
public static void main(String arg[]){ 
    String[] mylist = {"sunday","monda","tuesday","wednesday","thurday","friday","saturday"}; 

    TestList tl1 = new TestList(); 

    for(String s : mylist) 
     tl1.list.add(s); 


    tl1.mainList.add(tl1.list); 

    //tl1.list.clear(); // here if clear then not getting the list 

    tl1.list = null; ///// but here to assign null still getting list 

    System.out.println("after clear"); 
    System.out.println(); 
    for(List<String> list : tl1.mainList){ 
     for(String s : list){ 
      System.out.println(s); 
     } 
    } 

} 
} 

그래서 제 질문입니다 tl1.list.clear();를 사용하여 tl1.list를 지우는 것입니다. 그런 다음이 값을 인쇄하십시오. 그러나이 tl1.list에 null을 지정하면 값이 어떻게 출력됩니까?

답변

2

tl1.list.clear()은 에 추가 된 list 목록을 지 웁니다. 자바는 객체 지향 객체 인 listmainList.get(0)과 정확히 같은 객체입니다. tl1.list을 null로 설정하면 개체를 역 참조하기 만하고 mainList에서 계속 사용할 수 있습니다. 그와 관련된 요소를 제거 할 것을 의미하지 않는 컬렉션에 할당

내가 질문을 이해한다면 모르겠지만,이 당신이 무엇을 요구 추측 ...

+0

m 답변을 주신 내용을 묻는 것이지만 여전히 null로 목록을 지정하고 mainList에 보관하는 방법을 혼동하는 경우에도 여전히 혼란 스럽습니까? 그 루프에 대한 tl1.list를 통해 가서 nullpointer 예외를 얻지 만 이해할 수없는 tl1.mainList가 아닌 경우 null이되어야합니다. – Pratik

+0

이것은 객체 지향이 작동하는 방식으로 객체 참조를 변수에 할당하는 방법입니다. 변수를 널 (null)로 설정하면 ('tl1.list = null') 참조만을 제거합니다. [Java 자습서] (http://download.oracle.com/javase/tutorial/java/index.html)를보십시오. – home

3

. 더 이상 그 객체를 더 이상 필요로하지 않는다는 것을 의미합니다. 이제는 가비지 컬렉터가이 객체를 역 참조합니다. null assignment인쇄 문 사이에 많은 문이있는 경우 GC에서 참조를 해제하는 데 시간이 걸릴 수 있으므로 문제가 발생할 수 있습니다.
내 대답을 이해하는 데 도움이되기를 바랍니다.

1

당신이 무엇을 요구하고 있는지 명확하지 않습니다. 아마도 clear()가 객체를 삭제한다고 생각합니다. 사실이 아니기 때문에 목록이 비어있게됩니다.

관련 문제