해당 선언이 최종 상태이고 수정될 수 없음을 뜻함 -> final이 지정되면 초기값 설정 후 더 이상 값 변경할 수 없다.
상속할 수 없는 클래스 = 부모 클래스가 될 수 없고, 자식 클래스를 만들 수 없다.
public final class 클래스명 { ... }
final 클래스의 대표적인 예는 자바 표준 API에서 제공하는 String 클래스이다.
메소드를 선언할 때 final 키워드를 붙이면 이 메소드는 최종적인 메소드이므로 재정의 할 수 없는 메소드.
즉, 부모 클래스를 상속해서 자식 클래스를 선언할 때, 부모 클래스에 선언된 final 메소드는 자식 클래스에서 재정의(Overriding)할 수 없다.
String
: 불변한 문자열로 변경 작업을 할 때마다 새로운 String 객체가 생성되므로 메모리 공간과 성능 문제 발생 가능성이 있다.
StringBuffer
: 가변 문자열로, 변경할 시 기존 객체 내부가 수정되며 문자열 작업이 빈번한 경우에 유용하며, 내부적으로 동기화되어 멀티 스레드 환경에서 유용
StringBuilder
: StringBuffer와 마찬가지로 가변 문자열로 변경 작업 시 기존 객체 내부 수정. 하지만 내부적으로 동기화되지 않아 멀티 스레드보다 단일 스레드 환경에서 좋다.