1. 문자열 기본 (String Basics)

자바에서 문자열을 생성하는 방법은 크게 두 가지가 있다.

메모리를 효율적으로 사용할 수 있는 리터럴 방식이 더 권장된다.

// 1. 리터럴 방식 (권장 ⭐)
// 메모리의 'String Constant Pool'에 저장되어 같은 문자열은 재사용된다.
String str1 = "Hello"; 

// 2. new 객체 생성 방식
// 호출할 때마다 메모리(Heap)에 새로운 객체를 무조건 찍어낸다. (메모리 낭비 가능성)
String str2 = new String("Hello");

2. 문자열 필수 기능 (String Methods)

문자열을 조작하고 정보를 얻어내는 핵심 내장 함수들이다. 아래 표는 String s = "I like Java";를 기준으로 작성되었다. (자바의 인덱스는 0부터 시작한다.)

기능 (Method) 설명 예시 결과
length() 문자열의 총 길이를 반환 (공백 포함) s.length(); 11
toUpperCase() 모든 문자를 대문자로 변환 s.toUpperCase(); "I LIKE JAVA"
toLowerCase() 모든 문자를 소문자로 변환 s.toLowerCase(); "i like java"
contains() 특정 문자열이 포함되어 있는지 확인 s.contains("Java"); true
indexOf() 특정 문자열이 처음 시작되는 위치(인덱스) 반환 s.indexOf("Java"); 7
lastIndexOf() 특정 문자열이 마지막으로 등장하는 위치 반환 s.lastIndexOf("a"); 10
String s = "I like Java";

// [문자열 기능 사용 예제]
System.out.println(s.length()); // 11 출력
System.out.println(s.toUpperCase()); // I LIKE JAVA 출력
System.out.println(s.indexOf("Java")); // J가 7번째 인덱스에 있으므로 7 출력

3. 문자열 비교 (String Comparison)

자바에서 문자열을 비교할 때 가장 주의해야 할 부분이다. 단순 연산자인 ==와 내장 함수인 .equals()의 용도가 완전히 다르다.

  • == 연산자: 두 문자열이 메모리상에서 같은 주소(위치)를 가리키는지 비교한다.
  • .equals() 메서드: 메모리 주소와 상관없이, 안에 들어있는 실제 텍스트 내용이 완벽히 같은지 비교한다.
String a = "Java";
String b = "Java"; // a와 같은 리터럴 풀을 참조
String c = new String("Java"); // 아예 새로운 메모리 주소에 할당됨

// 1. 주소 비교
System.out.println(a == b); // true (리터럴 방식은 같은 텍스트면 같은 주소를 가리킴)
System.out.println(a == c); // false (c는 new로 새로 만들었기 때문에 주소가 다름)

// 2. 실제 값 비교 (실무 및 알고리즘 필수 ⭐)
System.out.println(a.equals(c)); // true (주소는 달라도 내용물 "Java"는 똑같으므로 true)

// 3. 대소문자 무시하고 값 비교
String d = "java";
System.out.println(a.equalsIgnoreCase(d)); // true

4. 특수 문자 (Escape Sequence)

문자열 안에서 줄바꿈을 하거나, 따옴표 자체를 글자로 출력하고 싶을 때는 백슬래시(\)와 조합된 이스케이프 시퀀스를 사용해야 한다.

특수 문자 설명 사용 예시 결과
\n 줄바꿈 (New line) "안녕\n하세요" 안녕
하세요      
\t 탭 (Tab) - 일정 간격 띄우기 "이름:\t홍길동" 이름: 홍길동
\" 큰따옴표 출력 "\"자바\" 공부" “자바” 공부
\' 작은따옴표 출력 "\'자바\' 공부" ‘자바’ 공부
\\ 백슬래시 자체를 출력 "C:\\Workspace" C:\Workspace
// [특수 문자 사용 예제]
System.out.println("줄바꿈이\n됩니다.");
System.out.println("경로는 C:\\Users\\Desktop 입니다.");
System.out.println("그가 말했다. \"자바는 재밌어!\"");