BiFOS
18
2018-12-05 10:07:30
2
110

자바 기초 문법 문자열 비교 질문이요


오랜만에 기초책을 다시 정독중인데요 헷갈리는 것이 있어서 질문합니다


1. System.out.printf(" \"abc\" ==  \"abc\" ? %b\n", "abc"=="abc");

"abc" == "abc" 이렇게 비교할 때, 

앞의 "abc"와 뒤의 "abc"는 동일한 객체인가요?

true가 나와서 그렇구나 하는데 뭔가 헷갈리네요..

   

2. String str1 = "abc";

System.out.printf(" str1 ==  \"abc\" ? %b\n", str1=="abc");

   

3. String str2 = new String("abc");

System.out.printf(" str2 ==  \"abc\" ? %b\n", str2=="abc");


2,3번은 각각 true, false가 나오는데 그 이유도 궁금합니다..

String str1 = "abc" 이렇게 선언하면

자동으로 메모리에 "abc" 값을 가진 객체에 주소가 맵핑되는 원리인가요?


0
0
  • 답변 2

  • 엔카나
    319
    2018-12-05 10:34:41

    문자열(String 객체)은 내용변경이 불가능한 immutable 객체입니다.

    따라서 여러 곳에서 동시에 참조하더라도 문제가 없죠.


    이런 점을 생각해보면 어차피 immutable 한데 똑같은 내용을 가진 문자열을 굳이 둘 이상 생성할 필요가 없습니다.

    더군다나 문자열은 개발에 있어서 아주 빈번히 사용되는 데이터죠.

    그래서 새로운 내용의 문자열 객체는 생성하지만 이후부터는 똑같은 내용의 문자열 객체를 생성하려할때 새로이 생성하지 않고 기존의 객체를 공유하게 됩니다.

    이걸 풀링이라고 하구요.


    하지만 new 로 명시할 경우는 예외입니다.

    이 경우 기존에 동일한 내용의 문자열이 있다고 하더라도 무조건 새로운 문자열 객체를 생성합니다.

    3
  • BiFOS
    18
    2018-12-05 11:14:59

    엔카나

    키워드를 뭘로 검색해야하나 고민했었는데, Pool이었군요!

    좋은 답변 감사드립니다~

    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.