개발/Java

[Java] String 객체 생성 차이

hojak99 2017. 11. 7. 11:17

String

String 을 생성하는 방법으로 2가지가 존재한다.


String str = "hojak";
String str2 = new String("hojak");

System.out.println(str);        // hojak
System.out.println(str2);       // hojak

각각의 생성 방식의 차이는 무엇일까?

먼저, 이 두 가지 차이점을 알기 위해서는 메모리 관점에서 보아야 할 것 같다.

간단하게 설명하자면
String str = "hojak"; 는 Heap 내의 String constant pool 이란 곳에 저장한다. 또한, 이미 존재하는 문자열이 있을 경우 그 저장된 배열의 인덱스 번호를 가리키게 되어 있다.
String str2 = new String("hojak); 은 일반적인 객체 생성과 같다. 그래서 Heap 내에 해당 객체의 레퍼런스 주소를 가지고 있다.

다음의 코드를 보며 좀 더 이해하도록 하자.


String str = "hojak";
String str2 = "hojak";

String str3 = new String("hojak");
String str4 = new String("hojak");

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

여기서 이제 equals, == 를 차이를 알아야 한다.

위와 같은 코드에서도 알 수 있듯이,
== 는 객체의 주소값을 비교하는 것이고, equals 는 객체의 값을 비교하는 것이다.

보통 나는 객체의 값을 비교하기 때문에 equals 를 많이 사용한다.

반응형