- 자바에서 문자열을 표현하는데 사용된다.
- 불면(immutable)객체로, 한번 생성된 문자열은 변경할 수 없다.
String 선언방식
- 리터럴 방식 : String str1 = "Hello";
- 문자열 리터럴은 String Constant Pool에 저장되어 재사용된다.
- new 연산자 사용 : String str2 = new String("Hello");
- 힙 메모리에 새로운 객체를 생성하며, String Constant Pool과는 별개로 동작한다.
String Constant Pool
- JVM의 힙 메모리 내에 존재하는 특별한 영역으로, 문자열 리터럴을 저장하고 재사용하여 메모리 효율성을 높인다.
- 동일한 문자열 리터럴은 String Constant Pool에서 하나의 객체만 생성되고, 모든 변수가 이를 참조한다.
package _string;
public class StringTest1 {
// 변수
// 생성자
// 메서드
// 코드의 진입점
public static void main(String[] args) {
// Heap --> (String pool)
String str1 = "문자열";
// Heap 메모리에 할당
String str2 = new String("abc");
String str3 = new String("abc");
// 참조 비교 : 각각의 객체의 주소값을 비교한다. 주소 == 주소
// 21 -> ?
System.out.println("str2 == str3 : " + (str2 == str3));
// 문자열을 리터럴 방식으로 만들어 보자.
// 문자열은 아주 많이 사용되는 데이터이다.
String str4 = "abc";
String str5 = "abc";
String str6 = "abc";
System.out.println("str4 == str5 : " + (str4 == str5));
String str7 = str6 + "안녕";
System.out.println(str7);
} // end of main
}
package _string;
import _object.Book;
public class StringTest2 {
// 코드의 진입점
public static void main(String[] args) {
// 스트링 객체는 불변이다.
String str1 = new String("Hello");
String str2 = new String("world");
// 원래 객체 주소가 생성되어 있고 내부 변수 값이 변경이 된다면
// String 클래스는 수정되지 않고 불변이다.
// 즉 수정이 된다면 새로운 String 객체를 만드는 동작으로 실행된다.
System.out.println("고유 주소 확인 : " + System.identityHashCode(str1));
// 문자열 연결 기능 호출해 보기
str1 = str1.concat(str2);
System.out.println("수정 이후 고유 주소 확인 : " + System.identityHashCode(str1));
} // end of main
}
package _string;
public class StringTest3 {
public static void main(String[] args) {
String str1 ="ABCD";
int countStr1 = str1.length();
System.out.println("countStr1 : " + countStr1);
// replace 메서드는 문자열 내에서 특정 문자열을 다른 문자나 문자열로 교체하는데
// 사용할 수 있다.
String str2 = "HelloWorld";
String str3 = str2.replace("World","Java");
System.out.println("str2 : " + str2);
System.out.println("str3 : " + str3);
// substring 메서드는 문자열 일부분을 추출하여 새로운 문자열을 반환한다.
// 두 가지 오버로딩된 메서드를 제공
// startIndex --> 포함
// stopIndex --> 불포함
// 문자열 인덱스 인덱스 0 부터 시작한다.
String result3 = str2.substring(0,5);
System.out.println("result3 : " + result3);
}
}
'JAVA' 카테고리의 다른 글
예외 처리(Exception) - try catch finally (0) | 2025.04.26 |
---|---|
StringBuffer 클래스 (0) | 2025.04.26 |
자바 API 문서 확인하기 (0) | 2025.04.26 |
object 클래스와 equals(), hashCode()메서드 (0) | 2025.04.26 |
object 클래스와 toString() 메서드 (0) | 2025.04.26 |