문제

다음 진술에서 차이점은 무엇입니까?

String name = "Tiger";

final String name ="Tiger";

비록 String 수업은 final 클래스, 왜 "상수"변수를 최종으로 만들어야합니까?

도움이 되었습니까?

해결책

final 이러한 맥락에서 변수를 의미합니다 name 한 번만 할당 할 수 있습니다. 다른 지정 String 다시 반대하면 컴파일 오류가 발생합니다.

나는 여기서 혼란의 원천은 final 키워드는 여러 가지 상황에서 사용할 수 있습니다.

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

Wikipedia 기사를 참조하십시오 Java의 최종 각 사례에 대한 예제.

다른 팁

"최종"은 두 경우에 다른 것을 의미합니다.

java.lang.string 클래스는 최종입니다. 이것은 당신이 그것으로부터 상속받을 수 없다는 것을 의미합니다.

변수 "이름"은 최종이므로 다른 문자열 인스턴스를 가리 키도록 변경할 수 없습니다. 따라서 두 번의 다른 시간에 읽고 다른 값을 얻을 수 있기 때문에 비 결합 문자열 변수는 상수가 아닙니다.

이런 일이 발생하면 Java String 객체도 불변입니다. 이것은 특정 문자열 객체가 나타내는 값을 수정할 수 없음을 의미합니다. 이것을 배열과 비교 - 배열 객체의 첫 번째 요소를 다른 객체로 바꿀 수 있지만 문자열 객체의 첫 번째 문자를 다른 숯으로 바꿀 수는 없습니다. 그렇기 때문에 String.replace ()가 새 문자열을 반환하는 이유는 이전 문자열을 수정할 수 없습니다.

문자열이 최종 인 이유 중 하나는 문자열의 서브 클래스 인스턴스를 방지하는 것입니다.

그러나 특정 객체를 수정할 수 있는지 여부와 변수에 다른 개체를 할당 할 수 있는지 여부는 완전히 다른 개념입니다. 하나는 문자열 객체의 속성이고, 다른 하나는 문자열 변수의 속성이며, 이는 문자열 객체에 대한 참조입니다.

기억 Java 최종 키워드 이 경우 두 가지 목적을 제공합니다.

  • 이는 참조가 다른 문자열로 설정할 수 없음을 의미합니다. 즉, "이름 = ..."을 수행 할 수 없습니다.
  • 그러나 결정적으로, 그것은 참조가 의미한다는 것을 의미합니다 다른 스레드에 올바르게 게시되었습니다 (자세한 내용은 링크 된 기사 또는 Goetz et al, "Java Concurrency in Concurrency"와 같은 작품을 참조하십시오.

살펴보십시오 최종 키워드의 마지막 단어.

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

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

당신은 결승에 불변을 혼란스럽게하고 있습니다.

정수 및 긴 문자열은 내부 데이터가 캡슐화를 통해 수정으로부터 보호된다는 점에서 불변의 클래스입니다.

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

변수가 표시된 경우 결정적인 그러면 해당 변수의 값을 변경할 수 없습니다. 최종 키워드 변수와 함께 사용하면 상수가됩니다. 프로그램 과정에서 해당 변수의 값을 변경하려고하면 컴파일러가 오류를 제공합니다.

노트 : 참조 유형의 변수를 최종으로 표시하면 해당 변수를 다른 객체를 참조 할 수 없습니다. 그러나 참조 자체 만 최종이므로 객체의 내용을 변경할 수 있습니다.

원천 : Java의 최종 키워드

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top