JAVA(SPRINGBOOT)

[JAVA] 비교연산자 (==, equals)

본듀 2022. 12. 16. 15:23

Primitive Type(기본형)은 실제값을 스텍 메모리에 저장하기 때문에 
== 을 이용해서 값을 비교할 수 있다.

하지만 기본형이 아닌 Reference Type(참조형)은
실제값을 저장하는 것이 아니라 주소값을 힙 메모리에 저장한다.

리터럴 방식을 사용하면 String constant pool에 값이 저장되었는지 확인하고
있다면 기존 주소값을 반환, 없으면 새로운 주소값은 반환한다.

new 연산자를 이용하면 해당값을 새로운 주소값에 저장하여 주소값을 반환한다.

그렇기 때문에 ==을 통해서 비교하면 주소값을 비교하게되고
실제값이 같다고 해도 false를 반환할 수 있다.

equals 메서드를 통해 주소값이 아닌 실제값을 비교해야 기대하는 결과를 얻을 수 있다.

String a = "asdf";  //리터럴을 이용한 방식
String b = "asdf";
String c = new String("asdf");  //new 연산자를 이용한 방식

a == b;        //true
a == c;        //false
a.equals(c);   //true