OD
[JAVA] 문자열 비교 시 '=='와 '.equals()' 차이점 본문
String a = "muyaho";
String b = new String("muyaho");
System.out.println(a == b); // false
System.out.println(a.equals(b)); // true
a라는 변수에는 "muyaha"라는 String 변수가 할당되어 있고,
b라는 변수에도 "muyaha"라는 String 변수가 할당되어 있는데,
a == b를 출력하면 false가
a.equals(b)를 출력하면 true가 출력된다.
똑같은 문자열인데 왜 값이 다르게 나올까?
결론적으로,
'==' 연산자는 변수가 저장된 주소 값을 비교하고
'.equals()' 메서드는 변수의 값 자체를 비교한다
이러한 차이점 때문에 출력 결과가 다르게 나타난다.
먼저 저장 방식의 차이점이 있는데,
java에 String은 메모리의 Heap 영역에 저장이 되는데, 정확히 Heap의 'String constant pool'이라는 영역에 저장이 된다.
이는 jvm에서 'String constant pool'이라는 영역에 문자열을 저장하여 메모리를 절약하기 위함이라고 한다.
하지만, new 연산자를 사용하게 된다면, 그냥 Heap 영역 어딘가에 새로운 객체가 만들어지는데,
이러한 저장 방식(어떻게 생성하느냐에 따른 방식) 때문에 같은 문자열임에도 불구하고 다른 결과 값이 출력된다.
* 결론 : '==' 연산자는 주소값을, '.equals()' 메서드는 값 자체를 비교한다.
* 느낀 점 : 아직 자바 언어에 대한 공부를 이제 시작했지만, 값 자체만을 비교하기 위해서는 '.equals()' 메서드를 사용해야겠다.
하지만 그냥 간단하게 비교하는 거라면 그냥 heap에 저장한 뒤 사용해도 될 듯 한데, 아직 Heap 같은 메모리 구조에 대한 이해가 부족하기 때문에, 추후에는 heap, stack, static에 대한 것도 공부가 필요해 보인다.
'JAVA > TIL : JAVA' 카테고리의 다른 글
[JAVA] 조건문 - for each문 (0) | 2022.01.16 |
---|---|
[JAVA] 배열의 초기 값 (0) | 2022.01.16 |