String 클래스
1. 자바에서 문자열은 쌍따옴표(리터럴)로 감싸면된다
2. 자바에서 문자열을 저장하는 기본자료형은 없다
3. 문자열은 여러가지 조작을 할 수 있기 때문에 별도의 클래스로 자료형을 만들어 두었다.
4. 자바에서는 문자열은 책,영화,회원 처럼 객체로 취급된다.
String 은 객체이기 대문에 new
연산자를 사용해서 만든다. 예상대로 str1
과 str2
는 서로 다른 번지를 가리키고 있기 때문에 만약에 ==
비교연산자로 비교해보면 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 객체가 있다면, 그 객체의 주소값을 반환하여 참조하도록 한다.