String, new String

String, new String - String 생성방식의 차이

String a = new String("hello");
String b = new String("hello");
String c = "hello";
String d = "hello";

System.out.println(a==b); //case 1
System.out.println(c==d); //case 2

위 코드의 결과값은 어떻게 될까? equals 메소드였다면 둘 다 true이다. 하지만 == 연산이므로 case 1은 false이고, case 2는 true이다.


String a = new String("hello");
String b = new String("hello");

a와 b는 heap 내에 일반적인 객체를 생성하게 되므로 각기 다른 객체를 만들어 참조한다. 그러므로 ==연산자의 결과가 false가 된다.

String c = "hello";
String d = "hello";

그렇다면 c와 d는 같은 객체를 참조한다는 뜻이다. c가 선언되면 String constant pool에 “hello”가 저장될 것이고, d는 “hello”가 이미 있으므로 c와 같은 부분을 참조하게 된다. 그러므로 == 연산자의 결과는 true이다.


나는 주로 코드를 작성할 때 new String을 많이 쓰는데, 이럴 경우엔 호출될 때마다 항상 새로운 객체가 생성되므로 낭비가 된다. 그러므로 이 방법은 피하는 편이 좋고 아래처럼 사용하는 것이 좋다.

String str = "hello";

앞으로 좀 더 신경 써서 개발해야겠다.