Java에서 String 클래스는 매우 자주 사용되는데, 어떤 클래스인지 살펴볼까요?
String은 불변 객체입니다
java.lang.String 클래스는 최종 수정을 사용하며 상속될 수 없습니다. Java 프로그램의 모든 리터럴 값, 즉 "abc"와 같이 큰따옴표로 묶인 문자열은 String 클래스의 인스턴스로 구현됩니다.
String은 상수이며 일단 생성되면 객체를 변경할 수 없습니다. 즉, String 개체는 변경할 수 없으며 String 값을 수정하는 것처럼 보이는 모든 메서드는 실제로 수정된 문자열 내용을 포함하는 새 String 개체를 만듭니다. 원래 String 객체는 변경되지 않고 그대로 유지됩니다. String 개체는 읽기 전용 특성을 가지며 이를 가리키는 참조는 해당 값을 변경할 수 없습니다. 따라서 다른 참조에 영향을 주지 않습니다. 그러나 문자열 참조는 재할당될 수 있습니다.
Java 문자열은 메모리에서 유니코드 인코딩을 사용합니다. 모든 문자는 2바이트 고정 길이 인코딩에 해당합니다. 즉, 모든 문자(중국어 또는 영어)는 길이가 한 문자로 계산되어 2바이트를 차지합니다.
예:
public class Immutable { public static String upcase(String s) { return s.toUpperCase(); } public static void main(String[ ] args) { String str1= "Hello World"; System.out.println(str1); //Hello World String str2 = upcase(str1); System.out.println(str2); //HELLO WORLD System.out.println(str1); //Hello World } }
str1이 upcase() 메서드에 전달될 때 실제로 전달되는 것은 참조의 복사본입니다. 실제로 String 개체가 메서드의 매개 변수로 사용될 때마다 참조가 복사되고 참조가 가리키는 개체는 실제로 단일 물리적 위치에 머무르며 이동된 적이 없습니다.
문자열 상수 풀
상수 풀은 컴파일 중에 결정되어 컴파일된 .class 파일에 저장되는 일부 데이터를 나타냅니다. 여기에는 클래스, 메서드, 인터페이스 등의 상수와 문자열 상수가 포함됩니다. Java에서는 성능 향상을 위해 상수 풀에 정적 문자열(리터럴/상수/상수 연결의 결과)을 생성하고 동일한 객체를 사용하고 정적 문자열을 재사용하려고 합니다. 반복되는 문자열 리터럴의 경우 JVM은 먼저 상수 풀에서 검색하고 객체가 상수 풀에 있으면 객체를 반환합니다.
예 2:
public class test1 { public static void main(String[] args){ String str1 = "Hello"; //不会创建新的String对象,而是使用常量池中已有的"Hello", String str2 = "Hello"; System.out.println(str1 == str2); //true //使用new关键字会创建新的String对象 String str3 = new String("Hello"); System.out.println(str1 == str3); //false } }
위 내용은 Java의 문자열 클래스 란 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!