리터럴과 new 생성자의 차이

송성빈·2024년 7월 9일
post-thumbnail

개요

자바에서는 리터럴과 new 생성자를 통해 두 가지 형태로 문자열을 생성할 수 있다.
이 두 가지 방법의 차이에 대해 알아보도록 한다.


리터럴

리터럴로 생성된 문자열은 힙(Heap) 영역의 문자열 상수 풀(String Constant Pool)에 저장된다.
동일한 문자열 리터럴이 다시 사용되면 새로운 객체를 생성하지 않고, 상수 풀에 저장된 기존 객체를 참조하기 때문에 메모리 효율을 높일 수 있다.

String a = "hello";
String b = "hello";

System.out.println(a==b);		 // true
System.out.println(a.equals(b)); // true

리터럴을 사용한 경우, ab 는 동일한 메모리 주소를 참조하고 있기 때문에 == 연산자를 사용하여 동일성을 비교하면 true 가 출력된다.

new 생성자

new 키워드를 사용해 문자열을 생성하면 항상 새로운 객체가 힙(Heap) 메모리에 생성된다. 따라서 동일한 내용의 문자열이라도 다른 객체로 취급된다.

String a = new String("hello");
String b = new String("hello");

System.out.println(a==b);		 // false
System.out.println(a.equals(b)); // true

new 키워드를 사용하면 동일한 문자열이라도 새로운 객체가 생성되기 때문에 메모리 주소가 다르므로, == 연산자를 사용하여 동일성을 비교할 때 false 가 출력된다. 하지만 equals() 메서드를 사용하여 동등성을 비교하면 문자열의 값이 같기 때문에 true 가 출력된다.

0개의 댓글