2017-05-11 1 views
1

나는 빈 변수가 그 멤버 을 변경할 수 없습니다 자바 즉, 개체의 불변의 객체를 만드는 데 사용되는 것을 알고를 만드는 데 사용되는 방법에 문제빈 최종 변수는 불변의 객체

import java.util.*; 

class B 
{ 
    int a; 
}  
public class BlankFinal 
{ 
    public static void main(String args[]) 
    { 
     final B b; 
     b=new B(); 
     b.a=1; 

     System.out.println(b.a); 

     b.a=23;   // b object's a member is changed even though b is 
         // blank final 

     System.out.println(b.a); 

    }  
} 
없이 코드가 작동의 다음 행을 수행
+1

가방이 최종이면 다른 가방으로 교환 할 수 없다는 의미입니다. 가방에서 물건을 꺼내거나 새 물건을 넣을 수는 없습니다. – khelwood

+0

멋진 비유가 있습니다. –

답변

2

b이 최종 값이라는 사실은 사용자가 b (초기 초기화 후)에 새 값을 할당하는 것을 막을뿐입니다. b이 참조하는 객체의 상태를 변경하거나 b이 직접 참조하는 객체 (예 : b.a = ...)의 인스턴스 변수를 변경하는 B 메서드를 호출 할 수 있습니다.

1

B b에 대한 참조는 최종이며 변경할 수 없습니다. 데이터 필드 b.a의 값을 변경하려고하면 해당 참조가 변경되지 않으므로 그렇게 할 수 있습니다.

+1

거의 완벽하지만 생성자에서 초기화하지 않고'final int a'가 작동하지 않습니다. –

+0

하지만 생성자 (BlankFinal에서) 밖에서 초기화 할 수는 있지만 재 할당이 작동하지 않습니다. –

+0

참이지만 현재로서는 그대로 컴파일되지 않습니다. –