String 객체와 String 리터럴

2025. 3. 25. 22:59·CS 스터디/CS - JAVA

리터럴 방식 (String = “abcd”)


보통 객체를 생성할 때 new 키워드를 사용해야 하지만, 문자열은 리터럴 방식으로 생성할 수 있습니다. 리터럴 방식은 메모리 효율성을 높이기 위해 자바가 제공하는 최적화 기능입니다. 문자열 리터럴을 방식으로 문자열 객체를 생성하면 JVM의 Heap영역의 ‘문자열 상수 풀’ 영역에 할당됩니다. 일반적인 참조형태의 객체와 달리 만약 같은 문자열이 존재한다면 이미 존재하는 기존에 생성된 객체를 참조합니다. 쉽게 말해 동일한 내용의 문자열이면 같은 객체를 참조합니다.

 

리터럴 문자열 특징

  • 문자열은 String Constant Pool에서 상수취급되어 불변( Immutable )합니다.
  • == 비교 시 같은 참조를 가리키므로(동일 객체 취급) true를 반환합니다. 
  • 동일한 값을 가진 리터럴 방식으로 생성된 문자열이있다면, 해당 객체를 재사용하여 메모리가 절약됩니다.
더보기
💡문자열 상수 풀 (String Constant Pool)
힙 영역에 위치하며, 같은 값을 가진 문자열 리터럴을 중복 저장하지 않고 재사용하는 공간
public class LiteralStringTest {
    public static void main(String[] args) {
        // 리터럴 방식으로 문자열 생성
        String str1 = "hello";
        String str2 = "hello";

        // == 비교: 참조 비교
        System.out.println("str1 == str2: " + (str1 == str2));  // true (같은 객체 참조)

        // equals() 비교: 값 비교
        System.out.println("str1.equals(str2): " + str1.equals(str2));  // true (같은 값)
    }
}

 

객체 생성 방식 (String = new String(”abcd”))


new 연산자를 사용하여 문자열 객체를 생성하면 객체는 메모리의 Heap영역에 생성됩니다. 리터럴 방식의 같은 문자열이 존재해도, 새로운 객체를 생성합니다.

객체 문자열 특징

  • new 키워드로 생성된 객체는 항상 새로운 참조를 가진 객체이므로 == 비교 시 false를 반환합니다.
  •  서로 다른 문자열 객체의 내용의 동등성을 equals() 메서드로 확인합니다.
public class ObjectStringTest {
    public static void main(String[] args) {
        // 객체 방식으로 문자열 생성
        String str3 = new String("hello");
        String str4 = new String("hello");

        // == 비교: 참조 비교
        System.out.println("str3 == str4: " + (str3 == str4));  // false (다른 객체 참조)

        // equals() 비교: 값 비교
        System.out.println("str3.equals(str4): " + str3.equals(str4));  // true (같은 값)
    }
}

 

내용 정리


 

'CS 스터디 > CS - JAVA' 카테고리의 다른 글

final, finalize, finally의 차이와 활용  (0) 2025.04.01
String, StringBuilder, StringBuffer 특징 및 성능비교  (0) 2025.03.26
객체 지향 프로그래밍(OOP)의 특징 4가지  (0) 2025.03.22
Garbage Collection  (0) 2025.03.20
JVM의 구조  (0) 2025.03.19
'CS 스터디/CS - JAVA' 카테고리의 다른 글
  • final, finalize, finally의 차이와 활용
  • String, StringBuilder, StringBuffer 특징 및 성능비교
  • 객체 지향 프로그래밍(OOP)의 특징 4가지
  • Garbage Collection
BIS's tech Blog
BIS's tech Blog
Welcome to Kanghyun's tech blog :)
  • BIS's tech Blog
    벼익숙의 기술 블로그
    BIS's tech Blog
  • 전체
    오늘
    어제
    • 분류 전체보기 (67)
      • 알고리즘 (53)
        • 백준 (44)
        • 프로그래머스 (9)
      • CS 스터디 (14)
        • CS - JAVA (11)
        • CS - DB (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    재귀
    java
    너비 우선 탐색
    Lv2
    DFS
    브루트포스
    CS
    bottom-up
    프로그래머스
    BFS
    백준
    기술질문
    완전탐색
    깊이 우선 탐색
    Baekjoon
    dp
    알고리즘 고득점 kit
    Top-Down
    동적 계획
    자료구조
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
BIS's tech Blog
String 객체와 String 리터럴
상단으로

티스토리툴바