2011-12-23 2 views
3

제 질문을 고려해주십시오. 최종 값은 java에서 변경할 수 없습니다.최종 수정자가 목록에 지정된 상태에서 Java 라인 아래에있는 것은 무엇입니까?

private final List<Integer> list = new ArrayList<Integer>(); 

위의 목록 인스턴스화는 최종입니다. 이제 모든 요소를 ​​추가 할 수 있습니다. 그 후 나는 list = null을 할당 할 수 있습니까?

도와주세요.

감사합니다.

+0

가능한 중복 최종?] (http://stackoverflow.com/questions/154314/when-should-one-use-final) –

+0

더 많은이 http : // stacko의 중복 verflow.com/questions/4525642/java-final-arraylist 그러면 @BeauGrantham을 게시 한 링크. – Perception

답변

2

즉, 변수 list이 최종입니다.

다시 말해서 다른 것을 할당 할 수 없다는 의미입니다. 다음과 같이에 값 (참조)를 할당 완료되면

:

private final List<Integer> list = new ArrayList<Integer>(); 

당신은 다음과 같이 다시 뭔가 할 수 없습니다 :이 코드가 유효

list = new ArrayList<Integer>(); //this is invalid because you are trying to assign something else the variable list 

list.add(new Integer(123));입니다?

그것은 완벽하게 유효합니다. 변수 list이 참조하는 객체를 ArrayList에 추가하는 것입니다.

final 키워드를 사용하면 참조하는 개체가 아닌 list 변수가 제한됩니다.

1

자바의 new 키워드는 새 개체를 만들고 해당 참조를 반환합니다. 따라서 코드에서 list 변수는 새 목록에 대한 참조를 저장합니다. 최종 선언은 list에 저장된 참조가 최종이며 변경 될 수 없음을 의미합니다.

실제 목록은 여전히 ​​수정할 수 있습니다.

1

final 키워드는 변수가 한 번만 초기화 할 수 있음을 나타냅니다. 이 아닌은 해당 변수에 할당 된 객체의 불변성을 보장합니다. 즉,이 내용을 지시 대상의에 대한 변수가 참조 할 수있는에 대해 뭔가,하지만 아무것도 말한다.

1
코드에 대한

하고있는 경우이 :이 허용되지 않습니다

list.add(3); 

:

private final List<Integer> list = new ArrayList<Integer>(); 

이 가능합니다

list = new ArrayList<Integer>(); 
[때해야 하나 개 사용
관련 문제