본문 바로가기
Dev/☕ Java

[Java] 동등 비교 연산자 vs equals() 메서드 (feat. 데이터 타입)

by 아아덕후 2022. 5. 2.
반응형

자바에는 여러가지 데이터 타입들이 존재한다.

데이터 타입들을 여러가지로 그룹핑할 수 있지만, primitive 혹은 non primitive 인지 구분할 수 있다.

출처 : 부스트코스 - 쉽게 배우는 자바 2

primitive : 더이상 쪼갤 수 없는 원시 데이터 타입
non primitive : 

자바는 primitive 와 non primitive를 다르게 인식? 한다.


출처 : 부스트코스 - 쉽게 배우는 자바 2

 원시 데이터 타입(primitive )은 다음과 같이 같은 값을 가진다면 해당 값이 저장된 곳을 바라보게 한다.

이때, p1과 p2에 동등연산자(==)를 사용한다면(p1==p2) 같은 곳(value)을 바라보기 때문에 true값을 반환한다.

 

반면에, non primitive 데이터 타입은 같은 곳을 바라보지 않는다.

출처 : 부스트코스 - 쉽게 배우는 자바 2

String 타입의 o1과 o2는  "java" 라는 내용을 가지는 객체를 만든다고해도 
이미 "java"라는 문자열이 존재하더라도 서로 다른 곳에 저장한다.

이때 o1과 o2에 동등연산자(==)를 사용한다면(p1==p2) 같은 곳(value)을 바라보지 않기 때문에 false값을 반환한다.

따라서  원시 데이텁이 아닌 객체(non primitive)들은 equals() 라는 메서드를 호출하여 비교해야한다.

정리해보면, 

동등 비교 연산자(==) 는 같은 곳에 있느냐를 판단하며, 이는 primitive 데이터 타입들에 사용할 수 있다.
eqauls() 메서드는 같은 내용을 가지고 있느냐를 판단하며, 이는 non primitive 데이터 타입들에 사용할 수 있다.
(primitive 타입은 equals 사용 불가 / non primitive 타입은 동등연산자 사용 불가)

 

하지만 예외적으로 문자열 타입(String)은 다음과 같이 동등 연산자가 사용이 가능하다.

출처 : 부스트코스 - 쉽게 배우는 자바 2

문자열은 원시 데이터 타입(primitive)처럼 새로운 곳에 똑같은 값을 만들지 않고 이미 존재하는 값을 가리킨다.

문자열(non primitive)의 경우에 동등 비교 연산자(==) 사용이 예외적으로 가능하다. (아마도 많이 사용하기 때문인가?)

 


 

반응형

댓글