2012-07-11 3 views

답변

3

final은 불변 개체를 구현하는 데 도움이됩니다. 변경 불가능한 객체는 소유하고있는 객체 자체가 불변이거나 적어도 공개적으로 변경할 수 없도록 보장해야합니다.

Java에서 변경 불가능한 부분은 없습니다 (그렇지 않으면 추가 할 수도 있음).

4

마지막 질문에 대한 간단한 대답은 다음과 같습니다.

'b'의 상태를 돌연변이시킬 방법이 없다면, final은 'a'의 가변성과 관련하여 아무 것도 얻지 못할 것입니다.

이것은 직교 개념이지만 가능한 모든 장소에서 "최종"을 사용하면 개체 불변성을 달성하는 데 도움이되지만 필요하지 않고 필요없는 경우 수행 할 수도 있습니다.

0

나는 100 % 확실하지는 않지만 차이점은 본질적으로 final 키워드를 사용하면 프로그래머가 변수가 항상 같은 개체를 참조하여 실행되는 것을 보증한다는 점이라고 생각합니다. 그러나 개체 자체가 어떤 식 으로든 변경되는 것을 막는 것은 없습니다.

는 다음 의사 생각해 final Car c = new BMW(Color.Green, new Milage(0));

당신이 코드에서 나중에 아우디, 또는 포드에 c를 할당 할 수 없습니다, 그러나 제한은이 과정을 통해 사용량 증가의 있도록 BMW를 "사용"에 없다 귀하의 프로그램의. 필드 final 만들기

1

이것은의 불변성을 보장하기에 충분하지 않지만, A는 B.

참조 수정되지 않는다고 컴파일 시간 체크를 제공 것이 도움이된다.

방어 복사본은 참조하는 변경 가능한 개체의 외부 수정을 방지 할 수 있습니다. A 생성자가받은 객체와 A 접근자가 반환 한 객체 모두에 대해 방어 복사본을 만들 수 있습니다.

0

개체가 변경 불가능합니다 - 해당 개체의 변수 또는 데이터의 값을 일단 설정 변경할 수 없음을 의미합니다.

참조가 변경 될 수 없음 - 해당 개체를 가리키는 변수가 최종 변수임을 의미합니다.