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

조회수 10820회

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

2 답변

  • 좋아요

    1

    싫어요
    채택 취소하기

    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문자열을 사용하는것을 추천합니다. 그게 더 읽기 쉽고 컴파일러가 코드를 최적화할 수 있는 기회를 제공합니다.

  • 우선, 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가 됩니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)