Java: String이란?


1. 개요

String은 Java에서 문자들의 연속(문자열) 을 표현하는 대표적인 클래스이며, java.lang 패키지에 포함되어 있어 별도의 import 없이 바로 사용할 수 있다.


2. 주요 특징

2.1 문자열은 객체다

String str = "hello";  // str은 String 클래스의 인스턴스

2.2 불변성 (Immutable)

String a = "hi";
a += "!";
System.out.println(a);  // hi!

"hi"는 그대로 있고 "hi!"는 새 객체로 Heap에 생성됨.

2.3 문자열 리터럴은 상수 풀(String Constant Pool)에 저장

String s1 = "java";
String s2 = "java";
System.out.println(s1 == s2);  // true → 같은 주소 참조

→ 동일한 리터럴은 JVM 내의 String Constant Pool에서 공유됨


3. 문자열 생성 방법

3.1 리터럴 방식 (권장)

String s = "Hello";

3.2 생성자 방식 (비권장)

String s2 = new String("Hello");

📌 사용 예시

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

System.out.println(a == b);       // false (주소 비교)
System.out.println(a.equals(b));  // true  (내용 비교)

4. 문자열 비교

4.1 == vs .equals()

String a = "test";
String b = "test";
String c = new String("test");

System.out.println(a == b);         // true (상수 풀에서 공유)
System.out.println(a == c);         // false (Heap에 새 객체 생성)
System.out.println(a.equals(c));    // true (내용 비교)

비교 방식

설명

==

객체의 주소값 비교 (레퍼런스)

.equals()

객체가 가진 내용값 비교


5. 문자열 길이와 메서드

String s = "hello world";
System.out.println(s.length());         // 11
System.out.println(s.charAt(0));        // h
System.out.println(s.substring(0, 5));  // hello
System.out.println(s.toUpperCase());    // HELLO WORLD
System.out.println(s.replace(" ", "_")); // hello_world

6. 기타 특징 및 내부 구조

6.1 String 내부 구조

public final class String implements java.io.Serializable, Comparable<String>, CharSequence {
    private final char value[];
    private final int offset;
    private final int count;
    ...
}

6.2 문자열 연결 (Concatenation)

String a = "Hello";
String b = "World";
String c = a + " " + b;  // Hello World
StringBuilder sb = new StringBuilder();
sb.append("Hello");
sb.append(" ");
sb.append("World");
System.out.println(sb.toString());  // Hello World

7. 정리

항목

String

불변성

✅ 한 번 생성된 값은 변경 불가

생성 방식

리터럴(권장), 생성자(비권장)

비교 방식

== 주소 비교 / .equals() 값 비교

내부 구조

Java 9 이전: char[]

연결 방식

+, concat(), StringBuilder 사용

사용 시기

고정된 문자열, 메시지, 상수 등




Revision #10
Created 20 May 2025 02:08:05 by Dain
Updated 26 May 2025 15:04:30 by Dain