자바에는 여러가지 데이터 타입들이 존재한다.
데이터 타입들을 여러가지로 그룹핑할 수 있지만, primitive 혹은 non primitive 인지 구분할 수 있다.
primitive : 더이상 쪼갤 수 없는 원시 데이터 타입
non primitive :
자바는 primitive 와 non primitive를 다르게 인식? 한다.
원시 데이터 타입(primitive )은 다음과 같이 같은 값을 가진다면 해당 값이 저장된 곳을 바라보게 한다.
이때, p1과 p2에 동등연산자(==)를 사용한다면(p1==p2) 같은 곳(value)을 바라보기 때문에 true값을 반환한다.
반면에, non primitive 데이터 타입은 같은 곳을 바라보지 않는다.
String 타입의 o1과 o2는 "java" 라는 내용을 가지는 객체를 만든다고해도
이미 "java"라는 문자열이 존재하더라도 서로 다른 곳에 저장한다.
이때 o1과 o2에 동등연산자(==)를 사용한다면(p1==p2) 같은 곳(value)을 바라보지 않기 때문에 false값을 반환한다.
따라서 원시 데이텁이 아닌 객체(non primitive)들은 equals() 라는 메서드를 호출하여 비교해야한다.
정리해보면,
동등 비교 연산자(==) 는 같은 곳에 있느냐를 판단하며, 이는 primitive 데이터 타입들에 사용할 수 있다.
eqauls() 메서드는 같은 내용을 가지고 있느냐를 판단하며, 이는 non primitive 데이터 타입들에 사용할 수 있다.
(primitive 타입은 equals 사용 불가 / non primitive 타입은 동등연산자 사용 불가)
하지만 예외적으로 문자열 타입(String)은 다음과 같이 동등 연산자가 사용이 가능하다.
문자열은 원시 데이터 타입(primitive)처럼 새로운 곳에 똑같은 값을 만들지 않고 이미 존재하는 값을 가리킨다.
문자열(non primitive)의 경우에 동등 비교 연산자(==) 사용이 예외적으로 가능하다. (아마도 많이 사용하기 때문인가?)
'Dev > ☕ Java' 카테고리의 다른 글
[Java] 자바 개발환경과 실행 과정 (feat. JDK, JRE, JVM) (0) | 2023.05.28 |
---|---|
[자바의정석 정리-3] 다형성 (0) | 2022.08.03 |
[자바의정석 정리-2] 상속 inheritance, 오버라이딩, Super, Super() (0) | 2022.05.26 |
[자바의정석 정리-1] 클래스, 인스턴스, 메서드, 변수 (feat. 쉽게배우는자바1 ) (0) | 2022.05.01 |
댓글