티스토리 뷰

문자열

자바에서 문자열을 작성하기 위해서는 String 객체를 사용해야 합니다.
문자열 선언 : String 변수명 = new String("문자열") or String 변수명 = "문자열"

문자열 메모리

- 문자열을 선언 하면 해당 변수는 Stack에 저장되고 실제 변수에 값은 Heap에 문자열 String 객체로 저장됩니다. 즉 Stack에 저장되는 것은 문자열 Object가 저장된 주소를 가지고 있습니다.

1. 문자열 복사

문자열 복사 메모리

- 문자열 변수를 다른 변수에 대입 연산자를 이용해서 할당을 하면 위 그림과 같이 Stack이 주소만 복사 합니다. 그 후 복사한 변수(strCopy)에 새로운 값을 저장하면 Heap에 저장한 실제 데이터가 할당되고 해당 변수(strCopy)는 실제 데이터의 주소를 가지게 됩니다. 

2. 문자열은 문자열 리터럴을 사용하여 생성 하면 동일 문자열 객체를 공유합니다. 

문자열 리터럴로 객체를 생성 하면 heap에 동일한 문자열이 있는 객체를 공유하고 new  연산자를 이용해서 문자열을 생성하면 Heap에 새로운 객체를 생성합니다.

 

문자열 메모리 구조

- strA, strB 변수는 동일 한 문자열을 문자 리터럴로 생성하여 Stack에 동일한 주소 100을 가지고 있고 strC, strD는 new 연산자를 사용하여 Stack에 각각 틀린 주소를 가지고 있습니다. 그 후 strB에 새로운 문자열을 저장하면 Heap에 새로운 문자열을 저장하고 strB의 Stack 값을 새롭게 할당(500) 합니다.

3. 문자열 연산 

문자열 연산(+)을 사용하면 문자열을 합쳐서 하나의 문자열 객체 생성합니다.
문자열 + 정수 리터럴 연산(+)은 정수 리터럴이 문자열로 자동 Casting 된 후 정수 연산이 있으면 정수 연산 후 문자열로 자동 Casting 후 합쳐서 하나의 문자열 객체 생성합니다.

 

문자열 연산

public class StringSharing {
   public static void main(String[] args) {
      String strA = "안녕 자바";
      String strB = "안녕 자바";
      String strC = new String("안녕 자바");
      String strD = new String("안녕 자바");

      System.out.println("문자열 리터럴 : 문자열 리터럴 = " + (strA == strB) );
      System.out.println("문자열 리터럴 : new String = " + (strA == strC) );
      System.out.println("new String : new String = " + (strC == strD) );

      strB = "안녕 C";
      System.out.println("문자열 리터럴 : 문자열 리터럴 = " + (strA == strB) );
   }
}

소스 : https://github.com/hyomee/JAVA_EDU/tree/main/Variable/src/com/javavariable/string

 

GitHub - hyomee/JAVA_EDU: 자바 기초 교육

자바 기초 교육. Contribute to hyomee/JAVA_EDU development by creating an account on GitHub.

github.com

 

'Java > 기본' 카테고리의 다른 글

015. 자바 : 변수 구분  (0) 2022.03.01
014. 자바 : 문자열 API  (0) 2022.03.01
012. 자바 : 2차원 배열  (0) 2022.03.01
011. 자바 : 참조자료형 : 배열  (0) 2022.02.27
010. 자바 : 기본 자료형  (0) 2022.02.27