728x90
반응형
질문 : Java의 "final"키워드는 어떻게 작동합니까? (나는 여전히 개체를 수정할 수 있습니다.)
Java에서는 final
키워드를 사용하여 값이 변경되지 않도록 지정합니다. 하지만 클래스의 생성자 / 메서드에서 값을 변경할 수 있음을 알았습니다. 다시 말하지만 변수가 static
이면 컴파일 오류입니다.
다음은 코드입니다.
import java.util.ArrayList;
import java.util.List;
class Test {
private final List foo;
public Test()
{
foo = new ArrayList();
foo.add("foo"); // Modification-1
}
public static void main(String[] args)
{
Test t = new Test();
t.foo.add("bar"); // Modification-2
System.out.println("print - " + t.foo);
}
}
위의 코드는 잘 작동하며 오류는 없습니다.
이제 변수를 static
변경하십시오.
private static final List foo;
이제 컴파일 오류입니다. 이 final
실제로 어떻게 작동합니까?
답변
final
변수 를 초기화 할 수 있습니다. 컴파일러는 한 번만 수행 할 수 있는지 확인합니다.
final
변수에 저장된 객체에 대한 메서드 호출 final
의 의미와 관련이 없습니다. 즉, final
은 참조 된 객체의 내용이 아니라 참조 자체에 관한 것입니다.
Java에는 객체 불변성 개념이 없습니다. 이것은 신중하게 대상을 설계함으로써 달성되며 사소한 노력과는 거리가 멀다.
출처 : https://stackoverflow.com/questions/15655012/how-does-the-final-keyword-in-java-work-i-can-still-modify-an-object
728x90
반응형
'프로그래밍 언어 > JAVA' 카테고리의 다른 글
JAVA의 원시 유형은 무엇이며 왜 사용하지 않아야 하는가? (0) | 2021.09.27 |
---|---|
Java 7에서 다이아몬드 연산자 (<>)를 사용해야 하는 이유 (0) | 2021.09.17 |
AngularJS에서 데이터 바인딩의 작동 원리 (0) | 2021.09.15 |
Java에서 현재 stack trace를 얻는 방법 (0) | 2021.09.13 |
[오류]JsonMappingException : No suitable constructor found for type [simple type, class ]: can not instantiate from JSON object (0) | 2021.09.13 |