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가 됩니다.

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

Hashcode는 개발자들을 위한 무료 QnA 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.