가 나는 Object A
내부 type B
의 최종 필드 b
을 가진 것은 바로 필드 b
다시 인스턴스화 할 수 없지만 A
의 상태가 여전히 내부 또는 외부 b
조작에 의해 변경 될 수 있음을 보장하기 때문에이 이상 혼란 스러워요, 어떻게합니까 최종 목적은 여기에 목적을 부여하지 않습니까?불변 인 객체와 불변 인 객체의 참조의 차이점은 무엇입니까?
답변
final
은 불변 개체를 구현하는 데 도움이됩니다. 변경 불가능한 객체는 소유하고있는 객체 자체가 불변이거나 적어도 공개적으로 변경할 수 없도록 보장해야합니다.
Java에서 변경 불가능한 부분은 없습니다 (그렇지 않으면 추가 할 수도 있음).
마지막 질문에 대한 간단한 대답은 다음과 같습니다.
'b'의 상태를 돌연변이시킬 방법이 없다면, final은 'a'의 가변성과 관련하여 아무 것도 얻지 못할 것입니다.
이것은 직교 개념이지만 가능한 모든 장소에서 "최종"을 사용하면 개체 불변성을 달성하는 데 도움이되지만 필요하지 않고 필요없는 경우 수행 할 수도 있습니다.
나는 100 % 확실하지는 않지만 차이점은 본질적으로 final
키워드를 사용하면 프로그래머가 변수가 항상 같은 개체를 참조하여 실행되는 것을 보증한다는 점이라고 생각합니다. 그러나 개체 자체가 어떤 식 으로든 변경되는 것을 막는 것은 없습니다.
는 다음 의사 생각해 final Car c = new BMW(Color.Green, new Milage(0));
당신이 코드에서 나중에 아우디, 또는 포드에 c
를 할당 할 수 없습니다, 그러나 제한은이 과정을 통해 사용량 증가의 있도록 BMW를 "사용"에 없다 귀하의 프로그램의. 필드 final
만들기
이것은의 불변성을 보장하기에 충분하지 않지만, A는 B.
에 참조 수정되지 않는다고 컴파일 시간 체크를 제공 것이 도움이된다.
방어 복사본은 참조하는 변경 가능한 개체의 외부 수정을 방지 할 수 있습니다. A 생성자가받은 객체와 A 접근자가 반환 한 객체 모두에 대해 방어 복사본을 만들 수 있습니다.
개체가 변경 불가능합니다 - 해당 개체의 변수 또는 데이터의 값을 일단 설정 변경할 수 없음을 의미합니다.
참조가 변경 될 수 없음 - 해당 개체를 가리키는 변수가 최종 변수임을 의미합니다.
- 1. 객관적인 c에서 변경 가능하고 불변 인 객체의 수를 유지합니까?
- 2. 정적 메소드보다 불변 객체의 장점은 무엇입니까?
- 3. 불변 문화재
- 4. 규모 불변이지만 회전 불변 인 피쳐 추출 방법이 있습니까?
- 5. 불변 개체에 허용되는 포인터입니까?
- 6. 지연을 불변 값으로 간주해야합니까?
- 7. 정적 불변 기본 인스턴스
- 8. 자바 : 불변 클래스
- 9. 차이가 무엇 가변 및 불변
- 10. 스칼라의 불변 목록에 'Unit'요소를 추가했습니다.
- 11. 불변 사전으로 작업하기
- 12. 불변 객체를위한 Hibernate CompositeUserType
- 13. GWT에서 불변 클래스 직렬화
- 14. 모든 불변 클래스가 최종해야합니까?
- 15. 구아바 불변 맵 초기화하기
- 16. 루프 불변 함수 작동
- 17. 동기화, 불변, 빈 콜렉션
- 18. 불변 문화의 Java 상당
- 19. NSUserDefaults와 SQLite3. NSUSerDefaults 불변?
- 20. 불변 클래스를위한 clone() 구현
- 21. Webgl의 줌 불변 개체
- 22. 내가 예컨대 불변 세트에
- 23. 불변 클래스에 관해서
- 24. 캐시 불변 값 : 피 잠금
- 25. 변경 가능 또는 불변 클로우즈
- 26. 불변 개체 트리를 어떻게 조작합니까?
- 27. 팩토리 함수에서 불변 개체 수정
- 28. 변하기 쉬운 메소드가 불변 객체로 전송되었습니다.
- 29. 줌 불변 방식으로 UIScrollView에 이미지 그리기
- 30. val 필드가있는 불변 객체 및 특성 스칼라