JAVA 제어문 - 5. == vs equals
==와 equals의 차이점 알아볼 것
자바의 데이터타입 두가지
구분하는 이유 : 기본형(primitive)와 아닌 것을 자바가 차이를 두기 때문
1.primitive (원시 데이터타입)
boolean, int, double, short, long, float, char
2.non primitive
String, Array, Date, File…
자바가 이 두 타입을 어떻게 차별하고 뭐가 다른지를 알아보자
같은 1의 value값이기에 또 다른 곳에 저장하면 낭비니 p1의 1의 값이 저장된 곳에 1의 값을 똑같이 p2가 끌어오게 끔 자바에서는 처리한다
이때 같은 곳을 가리키고 있냐고 알아보는 것이 ==이고 결과값은 true가 나온다.
위에 처럼
String o1 = new String("java");
String o2 = new String("java");
둘이 값은 같은데 ==로 보면 어떨까? false가 된다. 같은 값이지만 ==(primitive data type)은 같은 곳에 위치하는지 저장됬는지 주소를 보고 판단하기 때문
그렇다면 equals(non primitive data type)는?
o1.equals(o2) 메소드 호출
내용이 같은지 판단하기에 true
원시 데이터 타입(primitive)을 할 때는 동등비교연산자를 쓰면 된다
원시 데이터 타입은 equals를 가지고 있지 않기에 쓰면 에러
원시 데이터 타입이 아닌 것(non primitive)을 쓸 때는 equals를 써라
예외 : 문자열
(자주사용 편의성 성능 등으로 인한 특혜)
마치 원시 데이터 타입처럼 작동함 : non primitive type이지만 새로운 값을 생성하지 않고, 같은 값의 주소로 처리
String o3 = "java2"
String o4 = "java2"
== 동등 비교 연산해보면 true
*이 객체와 저 객체가 같은지 알아볼려면 검색해서 따져봐라
객체라고 하는 것은 복합적인 데이터타입이기 때문에 비교가 쉽지 않기 때문
==와 equals의 차이를 더 이해하려면
call by reference와 call by value에 대해 아래 링크에서 좀 더 알아보자
https://rise-up.tistory.com/182
'JAVA > 생활코딩 JAVA 제어문' 카테고리의 다른 글
생활코딩 JAVA 제어문(Flow Control) 7.1-2 : 반복문(Looping statement),배열(array) (0) | 2022.01.14 |
---|---|
생활코딩 JAVA 제어문(Flow Control) 6 : 논리 연산자(logical operator) (0) | 2022.01.14 |
생활코딩 JAVA 제어문(Flow Control) 4.1-3 : 조건문(Conditional Statement) (0) | 2022.01.09 |
생활코딩 JAVA 제어문(Flow Control) 3 : 비교연산자(Comparison Operator) (0) | 2022.01.09 |
생활코딩 JAVA 제어문(Flow Control) 1-2 : 수업소개 & 불리언(Boolean) Data type (0) | 2022.01.09 |