스트링이라고 불리는 클래스 인스턴스
"test"
- 여기서 test는 인스턴스입니다. 그렇다면 어떤 클래스의 인스턴스일까요
- 자바에서 글씨는 모두 String Class에 의해 출력됩니다.
- 이 때 큰 따옴표(””)와 함께 사용됩니다.
- 자바에서 글씨는 모두 String Class에 의해 출력됩니다.
- 만약 저장을 하고 싶다면
String str = "test"
- 와 같이 사용할 수 있습니다.
- → test에 대한 인스턴스를 생성하고 래퍼런스를 str에 저장
String 리터럴은 Heap 영역 내부의 String Constant Pool에 저장된다. 같은 문자열 리터럴은 하나의 객체를 공유한다.
String a = "test";
String b = "test";
a == b // true
String a = new String("test");
String b = new String("test");
a == b // false
스트링 인스턴스가 특별한 이유
- BigDecimal bd = new BigDecimal("1.0") 이와 같이 다른 객체들은 생성자(constructor)가 있어야 만들 수 있었습니다
- 그러나 str은 생성자가 없어도 만들 수 있고 생성자를 사용해 만들 수도 있다
생성자로 스트링 만드는법
String str = new String("Test")
- 우리는 test를 스트링 리터럴 이라고 부릅니다.
스트링의 인덱스
⚠️스트링은 무조건 0부터 시작합니다!
charAt (한 문자 자르기)
- 만약 어떤 하나의 문자를 출력하고 싶다면 charAt을 사용
String str = "Test"
str.charAt(0) // T
str.charAt(2) // s
substring (여러 문자 잘라내기)
String biggerString = "This is a lot of text"
- 서브 스트링
- 문자열에서 특정 부분을 잘라내어 새로운 문자열을 생성하는 메서드
- 서브 스트링 메서드는 이 문자의 인덱스를 받는다
- 해야될 것은 문자의 인덱스 번호를 넣으면 된다
biggerString.substring(5)
// "is a lot of text"
시작과 끝도 설정하기
biggerString.substring(5, 13)
// "is a lot"
- 중요한 건 시작은 포함이고 끝은 포함하지 않는다는 것
- 즉, 범위는 5 ~ 12까지
lastIndexOf (마지막에 있는 단어 찾기)
string.lastIndexOf('i');
contains (글자가 있는지 확인하기)
string.contains("text")
- text 라는 단어가 존재하는지 찾고자 할 때 ‘text’를 값으로 입력하면 된다
startWith (특정 단어로 시작하는지 확인하기)
string.startsWith("This")
// true or false
endsWith (특정 단어로 끝나는지 확인하기)
string.endsWith("text")
// true or false
isEmpty (비어 있는지 확인하기)
string.isEmpty()
// true or false
equals(글자가 똑같은지 확인하기)
"true".equals("true")
// true
- 대소문자가 다르게 인식됨
equalsIgnoreCase (대소문자 상관없이 글자가 똑같은지 확인하기)
"true".equalsIgnoreCase("TRUE") // true
// true
스트링 수정
- 스트링은 불변의 객체로 값을 수정할 수 없습니다

- 사진과 같이 문자를 합쳤음에도 str에서는 반영되지 않았습니다
- 그냥 다른 스트링 값을 준 것!

- 이런식으로 변수가 달라져야 저장
- 즉, 우리가 스트링을 변경하려고 할 때 우리가 하는 것은 특정 스트링을 변경하는 것이 아닙니다
- string.concat을 사용하면 새로운 스트링이 만들어지며 원래의 스트링은 영향을 받지 않고 그대로 남아 있게 됩니다.
- ⇒ 이런 스트링의 특징을 불변성이라고 부릅니다
- 스트링 클래스가 특정 값으로 한 번 생성된 이후에는 그 특정 값은 절대 바꿀 수 없습니다
- 스트링에 메서드를 실행 시 새로운 스트링이 만들어지는 것.
toUpperCase (대문자로)
string.toUpperCase()
toLowerCase (소문자로)
string.toLowerCase()
trim (앞 뒤 간격 제거)
string.trim()
스트링과 숫자
1 + 2 // 3
"1" + "2" //"12"
"1" + 2 // "12"
"1" + 23 // "123"
1 + 2+ "3" // "33"
"1" + 2 + 3 // "123"
- 이런 결과가 나오는 이유는 자바는 문자열 + 숫자는 = 문자열이 됩니다
- 1 + 2+ “3” 과 “1” + 2 + 3의 차이점은 자바는 왼 → 오 으로 해석하기 때문
- 1+2 = 3 이 되고 3 + “3” = “33”이 된다
예제
Sytem.out.println("Value is " + 20)
Sytem.out.println("Value is " + 20 + 20)
Sytem.out.println("Value is " + (20+20))
// Value is 20
// Value is 2020
// Value is 40
- 괄호가 가장 먼저 연산되기 때문에 마지막은 40이 된다
join (문자 합치기)
String.join(",", "2", "3", "4")
// "2,3,4"
String.join(",", "A", "B", "4")
- 첫 번째 문자는 어떤 문자를 합칠 것인지, 그리고 나머지는 뒤로 덧붙이고 싶은 숫자들이나 문자들
replace (문자열 대체하기)
"abcd".replace('a', 'z');
//zbcd
String 대체
StringBuffer
- 자바에서 스트링을 생성할 수 있는 또 다른 클래스
- 수정이 가능하다
StringBuffer sb = new StringBuffer("TEst");

- 수정이 되고 결합이 많은 경우 String보단 StringBuffer가 더 유용
StringBuilder
StringBuffer와 유사하지만 동기화를 제공하지 않아 단일 스레드 환경에서 더 빠르다.
- 스트링 버퍼는 동기화된 클래스인데
- 이 말은, 멀티 스레딩이 가능한 클래스라는 말
- 멀티 스레딩이 가능하다는 것은 그것으로 인한 패널티 또한 있다는 뜻
- 싱글 스레드 시나리오의 경우 멀티 스레딩을 할 때 가지는 복잡한 사항들이 없는데 스트링 버퍼의 경우 속도가 매우 느려질 수 있고 그럴 때 사용하는 게 바로 스트링 빌더
- 이 말은, 멀티 스레딩이 가능한 클래스라는 말
'Programming Language > Java' 카테고리의 다른 글
| [TIL] JAVA 배열에 관해서 (0) | 2026.01.30 |
|---|---|
| [TIL] Wrapper클래스 (1) | 2026.01.28 |
| [TIL]자바 프로그래밍의 참조 자료형 (0) | 2026.01.28 |
| [WIL] 자바 반복문 그리고 아쉬운 부분 (0) | 2025.11.02 |
| [TIL] While, Do While, Break, Continue 차이 정리 (0) | 2025.11.02 |
