[Java] String str = "" / String str = new String("")의 차이

YEVVU·2022년 6월 22일

Java

목록 보기
2/3

Java의 문자열

  • 자바의 문자열은 java.lang 패키지의 String 클래스의 인스턴스로 관리됨

  • 문자열 리터럴은 String 객체로 자동 생성되지만, String 클래스의 다양한 생성자를 이용해서 직접 String 객체를 생성해서 사용할 수도 있음

public class StringExample { 
  public static void main(String [] args) {
    //배열 전체를 String 객체로 생성
    String str = new(byte[] bytes);
    //배열의 offset 인덱스 위치부터 length만큼 String객체로 생성
    String str2 = 
        new String(byte[] bytes, int offset, int length);
  } 
}


Java의 String : 참조 자료형

자바의 String은 참조 자료형

  • 다른 참조 자료형과 공통점 : new 생성자를 이용해서 인스턴스를 생성한 후, heap에서 메모리 관리가 이루어짐

  • 차이점 : immutable함 -> 한 번 저장된 String 객체의 값은 변하지 않음 (기존의 값은 변경하면 객체가 변하는게 아니라 새로운 객체를 생성하고 재할당함)
    => String 객체들의 연산이 이루어질 때마다 새로운 객체를 계속 만들어 내기 때문에 메모리 관리 측면에서 상당히 비효율적임
    => 그래서 만들어진 메모리 영역이 Heap 안에 있는 String Constant Pool

public class StringPool {
public static void main(String[] args) {
        String s1 = "Cat";
        String s2 = "Cat";
        String s3 = new String("Cat");
        
        System.out.println("s1 == s2 :"+(s1==s2));
        System.out.println("s1 == s3 :"+(s1==s3));
    }
}
s1 == s2 : true
s1 == s3 : false

여기에는 기존에 만들어진 문자열 값이 저장되어 있고, s1과 s2처럼 리터럴로 생성된 같은 값을 가지는 객체는 같은 레퍼런스를 가지게 됨

s1은 heap 메모리에 개별 객체가 만들어지고, s2, s3는 String Constant Pool에 만들어진 하나의 객체를 참조함



[JAVA] String = " " vs new String(" ") 의 차이 (tistory.com)

What is Java String Pool?

0개의 댓글