2009-05-17 2 views
23

우리가 마지막으로 문자열 "상수"변수를 작성해야 할 이유를 다음 문 문자열 및 최종

String name = "Tiger"; 

final String name ="Tiger"; 

String 클래스 final 클래스이지만

에서의 차이는 무엇입니까?

+4

그것은, 여기가 아닌 문자열 자체를 최종를 만들어 문자열에 대한 참조입니다. –

답변

48

final이 문맥에서 변수 name은 한 번만 할당 될 수 있음을 의미합니다. 다른 String 개체를 다시 할당하면 컴파일 오류가 발생합니다.

는 여기 혼란의 원인이 final 키워드가 여러 가지 상황에서 사용할 수 있다는 생각 :

  • 최종 클래스 : 클래스는 서브 클래스화할 수 없습니다.
  • 최종 방법 : 메서드를 재정의 할 수 없습니다.
  • 최종 변수 : 변수는 한 번만 할당 할 수 있습니다.

각각의 경우에 대한 예제는 final in Java에 대한 위키 백과 문서를 참조하십시오.

+0

'final'은 다른 스레드에 대한 안전한 게시에 관한 내용이기도합니다 (아래의 내 대답 참조). –

1

당신은 마지막으로 불변의 것을 혼란스럽게 생각합니다.

문자열은 Integer 및 Long과 마찬가지로 내부 데이터가 캡슐화를 통해 수정되지 않도록 보호되는 불변 클래스입니다.

그러나 Ayman이 말했듯이 final은 문자열에 대한 포인터를 나타냅니다.

2

Java final keyword는,이 경우 두 가지 목적 기억 :이 기준은 다른 String-- 즉 이후에 수행 할 수 없습니다 'NAME = ... "으로 설정 될 수 없다는 것을 의미

  • ;
  • 하지만 결정적으로, 그것은 참조가 가 제대로 다른 스레드 (자세한 내용은 링크 된 문서를 참조하거나 게츠 등, "연습 자바 동시성"등의 작동에 게시되는 것을 의미한다.
+0

그래, 최종 프로그래머가 변경 가능성을 수용하는 경향이 있기 때문에, 최종의 의미론은 동시성 응용 프로그램에서 매우 중요합니다. 일반적인 Java 응용 프로그램에서는 그렇지 않습니다. – egaga

4

"최종 "두 경우에 다른 것을 의미한다.

java.lang.String 클래스는 최종이. 이것은 당신이 그것에서 상속 할 수 없습니다 것을 의미합니다.

변수"이름은 " '당신이 할 수있는 의미, 최종 그것을 String의 다른 인스턴스를 가리 키도록 변경하십시오. 그래서 최종 아닌 String 변수 당신이 두 가지 다른 시간에 그것을 읽고 다른 값을 얻을 수 있기 때문에 상수가 아닙니다.

Java 문자열 객체도 변경되지 않습니다. 즉, 특정 String 객체가 나타내는 값을 수정할 수 없습니다. 배열과 비교해보십시오. 배열 객체의 첫 번째 요소를 다른 객체로 바꿀 수 있지만 String 객체의 첫 번째 문자를 다른 문자로 바꿀 수는 없습니다. 이것이 String.replace()가 새 문자열을 반환하는 이유입니다. 이전 문자열은 수정할 수 없습니다.

String이 final 인 한 가지 이유는 String 대신에 변경 가능한 동작을 구현하는 String 하위 클래스의 인스턴스가 전달되지 않도록하기 위해서입니다.

그러나 특정 개체를 수정할 수 있는지 여부와 변수에 다른 개체를 할당 할 수 있는지 여부는 완전히 다른 개념입니다. 하나는 String 객체의 속성이고 다른 하나는 String 객체의 속성 인 String 변수의 속성입니다.

2

The final word on the final keyword을 살펴보십시오.

String name = "scott"; 
name = "tiger"; // OK 

final String gender = "male"; 
gender = "female"; // won't compile you cannot reassign gender cause it's final 
0

변수로 사용될 때 변수 최종 그 변수의 값을 변경할 수없는 즉 최종 키워드로 표시되어 있으면 그것을 일정한한다. 그리고 프로그램 과정에서 해당 변수의 값을 변경하려고하면 컴파일러에서 오류가 발생합니다.

참고 : 당신이 마지막으로 참조 형식의 변수를 표시하면, 그 변수가 다른 객체를 참조 할 수 없습니다. 그러나 참조 자체 만 최종이므로 개체의 내용을 변경할 수 있습니다.

자료 제공 : Final Keyword in Java