Java에서 " "를 사용한 문자열 초기화: 특수 사례
Java의 문자열 클래스는 객체 지향 엔터티임에도 불구하고 초기화될 수 있습니다. 큰따옴표를 사용합니다. 이러한 특이성은 다음과 같은 질문을 촉발시켰습니다: 객체 지향 프로그래밍의 범위 내에서 이것이 어떻게 가능한가?
Java의 독특한 접근 방식
Java의 모든 것이 반드시 필요하다는 개념과는 반대로 객체가 되기 때문에 언어 설계자는 성능상의 이유로 기본 데이터 유형을 유지하기로 결정했습니다. 호출 스택에 있는 기본 요소는 힙 할당 개체에 비해 더 빠른 처리와 더 낮은 메모리 사용량을 제공합니다.
이러한 고려 사항의 균형을 맞추기 위해 Java의 문자열은 하이브리드로 제작되었습니다. 기본 형식처럼 동작하지만 개체의 일부 특성도 가지고 있습니다.
문자열 리터럴 풀
큰따옴표를 사용하여 문자열 리터럴을 생성하면 다음에 직접 할당됩니다. 문자열 리터럴 풀. 풀은 메모리 사용을 최적화하기 위해 일반적으로 사용되는 문자열의 공유 저장소를 저장합니다. 동일한 문자열 리터럴에 대한 후속 참조는 불필요한 중복을 피하기 위해 이 풀에서 가져옵니다.
String Object
반대로, String 객체가 "new"를 사용하여 인스턴스화되면 연산자인 경우 다른 객체와 마찬가지로 힙에 할당됩니다. 이러한 문자열 개체는 고유하며 자체 메모리 공간을 차지합니다.
비교 및 저장
이 동작을 설명하려면 다음 코드 조각을 고려하세요.
String s1 = "Hello"; // String literal String s2 = "Hello"; // String literal String s3 = s1; // Same reference String s4 = new String("Hello"); // String object String s5 = new String("Hello"); // String object
다이어그램에 표시된 것처럼 s1, s2 및 s3은 모두 풀의 동일한 String 리터럴을 가리키는 반면 s4와 s5는 서로 다른 String 개체입니다.
의미 및 주의 사항
이 고유한 동작은 문자열 조작에 중요한 영향을 미칩니다. 리터럴은 변경할 수 없고 공유되므로 리터럴을 수정하면 해당 리터럴에 대한 모든 참조에 영향을 줍니다. 그러나 String 객체는 변경 가능하므로 다른 인스턴스에 영향을 주지 않고 특정 인스턴스를 수정할 수 있습니다.
Java 프로그램에서 효율적이고 올바른 문자열 처리를 위해서는 이러한 차이점을 고려하는 것이 중요합니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3