자바 문자열 생성자는 어떻게 구현?

Abhis :

나는 자바 문자열의 소스 코드를 가고 있었다, 나는 몇 가지 의문을 가지고 ctor에 발견 :

public String(String original) {
    this.value = original.value;
    this.hash = original.hash;
}

나는 원래 리터럴로 작동하는 것을 이해 String(큰 따옴표)하지만 자바 / JVM을 계산하는 방법을 이해 할 수 없습니다 original.valuechar배열입니다. 이상 여기에 "값"이란 무엇입니까? 값인 경우 char배열 방법은 다음 .value기능 / 필드가 계산된다 ???

윱 Eggen :

모든 언어 스크립트가 결합 될 수 있도록 설계하여 문자열, 유니 코드 텍스트를 보유하고 있습니다. 구현 어레이 (필드 이름을 보관 유지 용 value의 모든 문자는 2 바이트 UTF-16 값).

당신은 자바 클래스의 하나 AFAIK 만 바보 점을 발견했습니다.

도시 된 복사 생성자는 문자열 오브젝트 불변이기 때문에, 무의미하고, 이들은 단순한 할당에 의해 공유 될 수있다. 그것은 아마도 문자열 인턴과 관련, C ++ 상속의 fossile입니다.

a를하려면 복사가 무의미하다. 이것은 내부 너무 보유 char실제로 참조로 할당 될 수있다 어레이. (매우 그에하지 않습니다.)

다음 쇼 그래서 자바 사용을 미숙 한 :

String s = new String(t);

자바 최신 버전으로 문자열의 값은 실제로 어떤 바이트 인코딩 배열 따라서 느리게 문자가 제공 될 수있다.


문자열 리터럴 :

문자열 리터럴은이라는 된 .class 파일의 자료 구조에 저장되어있는 상수 풀 . 저장은 UTF-8 바이트로입니다. JVM은 클래스 로더는 문자열을 문자열로로드되도록합니다.

수입 final static String상수 상수 풀에 복사되지 않으며, 원래 클래스가 더 이상에서 수입 된 것으로 나타날 수 있습니다. 더 이상 클래스 의존성이 존재하지 않을 우려가 있으므로 다른 클래스에서 문자열 상수를 누르고 있으면 수동으로 정리 빌드를 수행해야 할 수 있습니다.

추천

출처http://43.154.161.224:23101/article/api/json?id=293137&siteId=1