본문 바로가기

CS/Java

new String()과 리터럴("")

"꽁탁" != new String("꽁탁");

new String()

new String()은 new 키워드로 새로운 객체를 생성하기 때문에 Heap 메모리에 새로운 주소를 할당받는다.

따라서, 모든 String 변수의 주소가 다르게 저장된다.

String a = "ABC"; //in String Constant Pool
String b = new String("ABC"); //in Heap
String c = new String("ABC"); //in Heap
System.out.println(a == b || a == c);  // false

String 리터럴

문자열 리터럴은 Heap 내의 String Constant Pool이라는 영역에 할당된다.

만약, 이미 같은 값을 가지고 있는 리터럴이 Constant Pool에 존재한다면, 새로운 객체를 생성하지 않고 기존의 리터럴을 사용한다.

String a = "ABC";  //in String Constant Pool
String b = "ABC";  //in String Constant Pool
System.out.println(a == b);  // true

'CS > Java' 카테고리의 다른 글

가비지 컬렉션  (0) 2023.09.02
로깅 시 System.out.println()을 사용하지 않는 이유  (0) 2023.08.13
String, StringBuffer, StringBuilder  (0) 2023.08.12
equals()와 hashCode()  (0) 2023.08.11
Java 컴파일 과정  (0) 2023.05.18