String 클래스 & Constant Pool

Kyu·2021년 1월 24일
0

Java 공부기록

목록 보기
24/40

String 클래스
1. 자바에서 문자열은 쌍따옴표(리터럴)로 감싸면된다
2. 자바에서 문자열을 저장하는 기본자료형은 없다
3. 문자열은 여러가지 조작을 할 수 있기 때문에 별도의 클래스로 자료형을 만들어 두었다.
4. 자바에서는 문자열은 책,영화,회원 처럼 객체로 취급된다.

String 은 객체이기 대문에 new연산자를 사용해서 만든다. 예상대로 str1str2는 서로 다른 번지를 가리키고 있기 때문에 만약에 == 비교연산자로 비교해보면 false 라고 나온다. (객체끼리 등가비교연산자로 비교하면 주소를 가지고 비교)

		String str1 = new String("asd");
        String str2 = new String("asd");
        System.out.println(str1.equals(str2));
        System.out.println(str1 == str2);

        String str3 = "asd";
        String str4 = "asd";
        System.out.println(str3.equals(str4));
        System.out.println(str3 == str4);

그런데 JVM에서는 String을 조금 특별히 관리하기 때문에, 객체이지만 new연산자가 아니라 리터럴("")을 이용해서 String 을 생성 할 수있다. 이때 JVM은 객체의 영역인 heap 영역이 아니라, constant pool 영역으로 찾아간다. 그리고 constant pool 영역에 이전에 같은 값을 가지고 있는 String 객체가 있다면, 그 객체의 주소값을 반환하여 참조하도록 한다.

참고

profile
TIL 남기는 공간입니다

0개의 댓글