자바에서 string객체와 문자열 string의 차이가 뭔가요?


String str = new String("abc");String str = "abc"; 의 차이가 뭔가요?

  • 2016년 02월 01일에 작성됨

조회수 573


2 답변


좋아요
0
싫어요
채택취소하기

String문자열을 쓰는것은 그 문자열을 가리킨다고 보시면됩니다. 하지만 new String("~~");은 새로운 문자열 객체를 생성하는 것입니다.

예를들어

String a = "abc"; 
String b = "abc";
System.out.println(a == b);  // true

여기서 a와 b 문자열은 같은 객체입니다.

String c = new String("abc");
String d = new String("abc");
System.out.println(c == d);  // false

여기서 c와 d는 각각 다른 객체를 레퍼런스합니다. 가능하면 String문자열을 사용하는것을 추천합니다. 그게 더 읽기 쉽고 컴파일러가 코드를 최적화할 수 있는 기회를 제공합니다.

  • 2016년 02월 01일에 작성됨


우선, Heap과 그 안에 존재하는 String constant pool에 대한 이해가 필요합니다.

String a = new String("abc"); 위 문장은, heap 내의 일반적인 객체를 생성한 뒤, 그 객체의 ref를 가지게 되는 것이며

String b = "abc"; 위 문장은, heap 내의 String constant pool에 저장시키거나, 이미 존재하는 문자열이라면 그 저장된 배열의 인덱스 번호를 가리키게 하는 형태로 되어있는 것으로 알고있습니다.

그래서, a == b 에 대한 결과는 false가 됩니다. 같은 객체를 참조하는 것이 아니기 때문이죠.

하지만 a.equals(b)는 문자열 자체를 비교한 결과를 돌려받는 것이기 때문에 이는 true가 됩니다.

  • 2016년 09월 09일에 작성됨
    리눅스 베이스의 자바 기반 웹애플리케이션 구현 및 서비스를 우선하고 있습니다.

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close