본문 바로가기
Language/Java

[JAVA] 등위연산자(==), .equals() 차이점

by jungwon3004 2022. 1. 17.
728x90
반응형
출처: 생활코딩

datatype은 크게 primitive datatype non-primitive datatype 둘로 구분됨

primitive DT는 기본적으로 우리가 생각하는 원형의 DT

boolean, char, int, double, short, long, float

7가지가 있음

나머지 non primitive DT는 수없이 많음

사실 이것들은 결국 하나의 object인 것이지만 DT처럼 사용되고 있음

많이 사용하는 것들로는 String, Array, Date, File 등이 있음

출처: 생활코딩
 

이제 본격적으로 == (comparison operator)과  .equal (object String's method) 비교해보자

쉽게말해,

== 는 primitive datatype 비교할 때

.equals() 는 non-primitive datatype 비교할 때

사용하면 된다

primitive datatype은 엄밀히 말하면 정해진 값 자체(리터럴; literal)를 지정하게 됨

즉, 포인터로 그 값 자체를 가리키는 것

따라서 ==를 통해서 그 값 자체를 비교하면 됨

하지만 non-primitive datatype은 공간을 할당하고 거기에 값들을 넣게 됨

이 과정에서 하나씩 내용을 비교하면 같더라도 할당되어있는 공간은 다르기 때문에 == 을 하면 다른 공간에 할당된 것이므로 다르다고 프로그램이 판단함

그래서 할당 주소 말고 딱 내용만 비교하기 위해 만들어진 .equals() 라는 method를 이용해야 함


참고로 non-primitive datatype은 그냥 object이므로

String a1 = new String("java");

이렇게 생성해야 맞지만

Strig은 너무 자주 쓰는 것이기 때문에

예외적으로

String a1 = "java";

라고 써도 허용해줌

또한 == 도 사용이 가능함

 
하지만
String a1 = "a";
String a2 = "a";
String a3 = new String("a");

이렇게 두 가지가 있다고 하면

a1 == a2 // true
a1.equals(a2) // true
a1 == a3 // false
a1.equals(a3) // true

 

728x90
반응형