Lewis's Tech Keep

[JAVA] 문자열 비교 String 에 관하여 본문

Java/개체지향 프로그래밍 with JAVA

[JAVA] 문자열 비교 String 에 관하여

Lewis Seo 2021. 5. 1. 03:23

자바에서 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 때문이다.

 

www.geeksforgeeks.org/string-constant-pool-in-java/#:~:text=A%20string%20constant%20pool%20is,is%20created%20in%20the%20heap.

 

String Constant Pool in Java - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org

링크에서 보면 알 수 있듯이 string 값을 할당하기전에 힙 메모리 안 string pool에서 같은 값이 있다면 같은 주소를 참조하게 된다.

 

Comments