오늘의하루

[JAVA] String클래스 본문

JAVA

[JAVA] String클래스

오늘의하루_master 2022. 8. 5. 11:39

1. String 클래스 정보

  • 문자열을 다루기 위한 클래스
  • 데이터(char []) + 메서드(문자열 관련)
  • 내용을 변경할 수 없는 불변(immutable) 클래스이다.
class StringTest1{
    String a = "a";
    String b = "b";
    
    void StringSum(){
        a = a + b; // "ab"
    }
}

어떻게 내용을 변경할 수 없는 불변의 String클래스가 변경이 되는지에 대해 알아보겠습니다.

  1. 참조 변수 a에는 문자열 리터널 "a"의 주소가 담깁니다. (예: 주소 : 0X100)
  2. 참조 변수 b에는 문자열 리터널 "b"의 주소가 담깁니다. (예: 주소 : 0X200)
  3. 문자열 리터널 "a"와 "b"를 합친 결과는 새로운 문자열 리터널 "ab"가 됩니다. (예: 주소 : 0X300)
  4. 참조 변수 a에 문자열 리터럴 "ab"의 주소(0X300)를 대입합니다.

내용이 변경되는 게 아니라 새로운 값을 받는 개념이며 이러한 문자열의 덧셈 연산은 성능이 떨어지는 편입니다. 

이러한 문제를 해결하기 위해 StringBuffer클래스를 사용하는 것이 좋습니다.

  • 문자열의 결합이나 변경이 잦을때 StringBuffer클래스 사용

2. 리터럴과 생성의 차이

class StringTest2{
    // str1과 str2의 주소값은 같다.
    String str1 = "abc";
    String str2 = "abc";
    
    // str3와 str4의 주소값은 다르다.
    String str3 = new String("abc");
    String str4 = new String("abc");
}
  • 문자열 리터널 값이 같다면 참조 변수에 대입되는 주소 값은 모두 같습니다.
  • 새로운 String인스턴스를 생성하는 경우는 각자 다른 인스턴스이기 때문에 주소 값이 다릅니다.

3. 초기화

class StringTest3{
    String str1 = ""; // 빈문자열로 초기화
    String str2 = new String(""); // 빈문자열로 초기화
    char c = ' '; // 공백으로 초기화 (최소 공백 1개)
    
    // Java에서는 크기가 0인 배열을 생성하는 것은 어느 타입이나 가능합니다.
    int[] iArr = {};
    char[] chArr = new char[0];
}
Comments