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

 

'JAVA(SPRINGBOOT)' 카테고리의 다른 글

[JAVA] VECTOR  (0) 2023.01.26
[JAVA] GENERIC PROGRAMMING  (2) 2022.12.22
[JAVA] REQULAR EXPRESSION(정규 표현식)  (0) 2022.12.16
[JAVA] EXCEPTION(예외처리)  (0) 2022.12.16
[JAVA] STREAM(스트림)  (0) 2022.12.16