String literal과 String object의 차이

허세진·2026년 1월 19일

backend

목록 보기
3/20
post-thumbnail

String literal

String literal은 "abc" 문자열 그 자체다.

JVM은 문자열 리터럴을 힙 영역 안에 있는 String Constant Pool에 저장한다.

특징

  • 동일한 문자열 리터럴은 하나만 생성되고, 여러 변수가 이를 공유한다.

ex)

String a = "abc";
String b = "abc";

위와 같은 코드가 있으면 "abc" 객체는 String Pool에 1개만 생성되고, a와 b는 같은 객체 주소를 참조한다.

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

이렇게 테스트를 해보면 모두 true가 나오는것을 확인할 수 있다.

String object

String object는 new로 생성한 String 클래스의 인스턴스다.

문자열이 같아도 힙 영역에 새로운 객체가 생성된다.

ex)

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

위와 같은 코드가 있으면 "abc" 객체가 힙 영역에 2개 생성되는것이다.

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

이렇게 테스트를하면 위에건 true가 나오고 밑에건 객체의 주소 값이 다르니까 false가 나온다.

결론

new String() 방식은 같은 문자열이라도 항상 새로운 객체를 생성하기 때문에 불필요한 메모리 사용이 발생한다.
그리고 문자열을 String Constant Pool에서 재사용하지 못하기 때문에 객체 생성 비용이 증가하고, GC 부담이 커지는 문제 때문에 String literal을 사용한다.

참고 자료

https://velog.io/@kiiiyeon/%EC%9E%90%EB%B0%94-%EC%8A%A4%ED%8A%B8%EB%A7%81-%EA%B0%9D%EC%B2%B4-%EC%83%9D%EC%84%B1-%EB%B0%A9%EB%B2%95

profile
로그를 파고드는 시간을 즐기는 백엔드 개발자, 허세진입니다.

0개의 댓글