Java/까먹기 쉬운 중요한 사실들

String literal vs new

robinjoon98 2020. 4. 27. 00:15

String 클래스는 자바에서 문자열을 다루는 대표적인 클래스이다. 거의 모든 코드에 사용되고, 따라서 상세히 알아둘 필요가 있다.

 

String str = "aaa";
String str2 = new String("sss");
char data[] = {'a','b','c'};
String str3 = new String(data);

문자열은 위와같이 리터럴을 이용해 만들 수도 있고 생성자를 이용해 만들 수 있다.

두 경우 할당되는 메모리도 다르고, == 등의 연산에 있어서 조금 차이가 있다.

String str = "aaa";
String str2 = "aaa";
String str3 = new String("aaa");
String str4 = new String("aaa");

System.out.println(str==str2); // true
System.out.println(str3==str4); // flase
System.out.println(str==str3); // false

문자 리터럴을 사용해 객체를 생성할 경우, 이는 String constant pool 이라는 메모리공간에 할당된다. 이름처럼, 이 공간에는 같은게 두개 이상 존재할 수 없다. 따라서, str 과 str2는 같은 객체를 참조하고 있다. str3와 str4는 일반적인 객체이므로 당연히 == 의 결과는 false가 된다.