Java의 String 클래스가 불변인 이유(자세한 설명)
public final class String implements java.io.Serializable, Comparable<String>, CharSequence { /** The value is used for character storage. */ private final char value[];}
String 클래스의 값은 값 배열에 저장되며 private final
1에 의해 수정됩니다. 클래스는 값에 액세스할 수 없으며, 하위 클래스는 해당 클래스에 액세스할 수 없습니다. 물론 String 클래스는 클래스가 최종 수정되므로 하위 클래스를 가질 수 없습니다. 2. 최종 수정은 값에 대한 참조가 변경되지 않음을 나타냅니다. String의 생성자는 값 배열의 값을 수정하는 다른 방법이 없으므로 값의 참조와 값이 변경되지 않도록 보장합니다.
public String substring(int beginIndex) { if (beginIndex < 0) { throw new StringIndexOutOfBoundsException(beginIndex); } int subLen = value.length - beginIndex; if (subLen < 0) { throw new StringIndexOutOfBoundsException(subLen); } return (beginIndex == 0) ? this : new String(value, beginIndex, subLen);}
String이 불변으로 설정된 이유는 무엇입니까?
문자열 상수 풀
Java에는 8가지 기본 데이터 유형이 있습니다.
정수 유형: byte, short, int, long. 패키징 유형은 Byte, Short, Integer, Long
부동 소수점 유형: float, double입니다. 포장 유형은 Float, Double
문자 유형: char입니다. 포장 유형은 Character
Boolean 유형: boolean입니다. 패키징 유형은 Boolean
Constant Pool은 시스템 성능에 영향을 미치는 객체의 빈번한 생성과 소멸을 방지하기 위한 것이며, 객체 공유를 구현합니다.
예를 들어 문자열 상수 풀은 컴파일 단계에서 모든 문자열 리터럴을 상수 풀에 넣습니다. 메모리 공간 절약: 상수 풀에 있는 동일한 문자열 상수가 모두 병합되어 한 공간만 차지합니다.jdk1.7 이전에는 아무 것도 논의하지 않겠습니다. jdk1.7부터 문자열 상수 풀이 힙에 배치되기 시작했으며 이후 이 기사의 모든 내용은 jdk1.8을 기반으로 합니다.
다음은 다음과 같습니다. 코드는 여전히 자주 묻는 질문입니다. 메모리의String str1 = "abc"; String str2 = "abc"; String str3 = new String("abc"); String str4 = new String("abc"); // trueSystem.out.println(str1 == str2); // falseSystem.out.println(str1 == str3); // falseSystem.out.println(str3 == str4);
구조는 다음과 같습니다
상수 풀은 참조를 저장합니다
위 코드의 출력을 설명합니다. Java
String str1 = "abc"; String str2 = "abc"; // trueSystem.out.println(str1 == str2);
String str3 = new String("abc"); String str4 = new String("abc"); // falseSystem.out.println(str3 == str4);
스레드 안전성
불변 개체는 본질적으로 스레드로부터 안전하므로 다중 스레드 환경에서 문자열에 대한 동기화 작업을 피할 수 있습니다.읽어주신 모든 분들께 감사드리며, 많은 도움이 되셨으면 좋겠습니다.
이 기사는 다음에서 복제되었습니다: https://blog.csdn.net/zzti_erlie/article/details/106872673
추천 튜토리얼: "java tutorial"
위 내용은 Java의 String 클래스가 불변인 이유(자세한 설명)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!