2013-12-10 2 views

답변

1

자바의 배열은 참조 유형입니다. 배열 final을 선언하면 배열에 포함 된 요소가 아니라 배열 객체 참조 자체 final이 선언됩니다. 따라서 배열 참조를 변경할 수는 없지만 여전히 배열의 개별 요소를 변경할 수 있습니다.

원하는 효과를 얻으려면 Collections.unmodifiableList 또는 비슷한 것을 사용해야합니다.

2

final은 내용이 아닌 배열 참조에 적용되므로.

배열 내용을 수정할 수는 있지만 배열을 다시 나타낼 수는 없습니다.

0

배열 입니다. 다른 참조 변수의 경우도 마찬가지입니다. 변수의 상태는 변경할 수 있지만 변수가 참조하는 객체 (여기서는 배열 객체)는 변경할 수 없습니다. 배열의 경우 상태는 항목 참조입니다.

0
final int[] test = new int[3]; 
test = new int[2]; //Error here 

그러면 최종 배열을 선언하는 경우 뜻이므로

1

final int a[]={11,2}; 
    int b[]={}; 
    a=b;// this will compile wrong 
    a[1]=1;//this will compile fine 

있다면 (최종 레퍼런스 아닌 오브젝트 데이터에 적용)이 배열 참조 못해 변경할 수는 있지만 내용을 분명히 변경할 수 있습니다.

0

불변의 데이터 구조가 필요하면 List (원하는 경우 ArrayList을 사용할 수 있습니다.) 원하는 장소에 있습니다. 이 실제로 일 경우 배열이되어야하므로 getter 메서드 만 사용하여 자체 데이터 구조를 만들어야합니다.

+0

어떻게 ArrayList가 "변경 불가능한 데이터 구조"입니까? –

+0

@HovercraftFullOfEels :'ArrayList'의 퍼터 메소드를 오버라이드하여 "불변성"을 적용 할 수 있습니다. 그리고 네, 그것은 일종의 해킹입니다, 나는'Collection'을 사용할 것입니다. – AaronB

+1

Collections.unmodifiableList는, 지정된 List의 변경 불가능한 뷰를 작성합니다. –

0

final in Java는 변수에 영향을 미치며 사용자가 할당 한 객체와 아무 관련이 없습니다.

final String[] myArray = { "hi", "there" }; 
myArray = anotherArray; // Error, you can't do that. myArray is final 
myArray[0] = "over"; // perfectly fine, final has nothing to do with it 
관련 문제