2012-02-21 5 views
1

어떤 입력을 필요 개체 :의 ArrayList는

내가 N ArrayList이 있고 각 내가 foo는() 객체를 추가하고 말할 수 있습니다.

Foo foo = new Foo() 

A.add(foo); 

B.add(foo); 

N.add(foo); 

지금 다른 모든 ArrayList에 반영됩니다 하나 foo() 객체에서 수행 수정?

  1. 그렇다면 왜?

  2. 이 동작이 Vector 등의 다른 컬렉션을 사용하여 수행 할 수 있는지 여부 ...?

  3. 내가 foo를 null로 만들면 모든 arraylist에 반영됩니까?

답변

8
  1. 예, 모든 목록은 당신이 단지 널 (null)에 대한 참조를 설정 할 수 있기 때문에
  2. 예, 모든 컬렉션은, 그
  3. 없음처럼 작동 같은 객체에 대한 참조, 각 목록을 포함하기 때문에 참조 사본을 가지고있다.
+0

3에서 '아니오'에 대해 자세히 설명해 주시겠습니까? – aviad

+0

@aviad : A B와 N 각각은 참조 foo의 복사본을 포함하며 모두 동일한 객체를 참조합니다. foo를 null로 설정해도 복사본에 아무런 영향을 미치지 않습니다. –

+0

개체 자체가 무효화 (foo = null)되고 모든 컬렉션이 null을 참조한다고 생각했습니다. 나는 무엇인가 놓치 느냐? – aviad

0

힙 메모리의 개체에 Collection API 같은 ArrayList이나 Vector 보류 참조의 모든 구현은 그래서 당신은 get(index) 방법으로 List의 인덱스를 얻을 것입니다 때, 당신은 너무 객체 참조를 achive :

  1. 예, get(index) 방법으로 목록의 색인을 얻은 다음 달성 된 개체의 통계를 변경하면 변경 사항이 메모리에 남아 있습니다.
  2. 예, 모두 Collection API이 동작입니다.
  3. 아니요, 목록의 인덱스를 달성하면 "객체에 대한 참조 사본을 얻습니다."이며 null로 설정하면 목록 인스턴스가 변경되지 않습니다.
관련 문제