Lewis's Tech Keep
[JAVA] 문자열 비교 String 에 관하여 본문
자바에서 String 비교를 할 때 문자열 비교라면 그냥 맹목적으로 equals를 써야 한다고 생각했다.
== 비교는 주소를 비교하는 것이라 같은 String 일 지라도 다른 주소에 저장되어 있을 수 있기 때문이다.
하지만 왜 그런지 궁금했다.
Ex) String a = "hi";
String b = "hi";
를 하고 a == b 는 true
Ex2) String a = "hi";
String b = new String("hi");
를 하고 a == b 는 false
ex1과 ex2가 다른 답을 뱉어내는 이유는 다른 주소에 저장 되어 있기 때문
but 여기서 ex1 은 왜 정답일지 생각해본 적이 없었다.
어떻게 그냥 알아서 a와 b가 같은 주소가 되었을까?
(참고로 타 언어에서 a == b 가 문자열 자체를 비교하는 것은 문자열 오버로딩을 이용했기 때문)
이것은 string constant pool 때문이다.
링크에서 보면 알 수 있듯이 string 값을 할당하기전에 힙 메모리 안 string pool에서 같은 값이 있다면 같은 주소를 참조하게 된다.
'Java > 개체지향 프로그래밍 with JAVA' 카테고리의 다른 글
[OOP] OOP 특성 (0) | 2021.05.18 |
---|---|
[JAVA] 개체 지향 - 생성자 및 접근 제어자 (0) | 2021.05.11 |
[JAVA] 자바 자료형 (0) | 2021.05.01 |
[JAVA] 자바는 Cross Platform 인가? (0) | 2021.04.30 |
[JAVA] 패키지 & 빌드 및 실행 (0) | 2021.04.27 |
Comments