3-4. 비교 연산자

Hyun Jun·2022년 1월 22일
0

자바의 정석

목록 보기
12/52
post-thumbnail
post-custom-banner

비교 연산자

두 피연산자를 비교하는데에 사용됨. (주로 조건문이나 반복문의 조건식에 사용)

연산 결과는 true 또는 false 둘 중 한 가지임.

비교 연산자도 이항 연산자이므로 피연산자의 타입이 불일치할 경우, 큰 쪽을 기준으로 일치시킨 후에 비교 연산함.

 

대소 비교 연산자

<, >, <=, >=

피연산자의 값의 크기를 비교함. boolean을 제외한 모든 기본형에 사용 가능하고, 참조형에는 사용 불가능.

 

등가 비교 연산자

==, !=

기본형 간의 비교: 피연산자에 저장되어 있는 값이 같은지/다른지 비교함.

참조형 간의 비교: 객체의 메모리 주소값을 비교하여 같은/다른 주소를 가리키고 있는지 비교함.

 

intfloat의 비교:

10 == 10.0f // true

좌변이 float으로 형변환 되어도 데이터 손실이 없으므로 양변의 값이 같아서 true가 반환됨.

 

doublefloat의 비교:

0.1 == 0.1f // false

doublefloat 모두 실제 메모리에 2진수로 저장될 때는 각각 오차가 발생함. double의 정밀도가 더 높아 오차가 작으므로 두 값은 달라질 수 밖에 없음.

따라서 doublefloat을 비교하려면 doublefloat으로 형변환시켜준 상태에서 하는게 좋음.

(float)0.1 == 0.1f // true

 

문자열 비교

문자열끼리 비교할 때에는 비교 연산자 대신 equals() 메서드 사용.

String str = new String("hello");
String str2 = "bye"; // 허용

String(문자열)은 참조형 타입으로, 하나의 클래스이기 때문에 사용할 때는 new를 통해 인스턴스를 생성해야 함.

그러나, String은 예외적으로 인스턴스 생성 없이 바로 사용하는 것도 허용됨. (str2 예시)

str.equals(str2) // false

equals() 메서드는 String의 내용 일치 여부에만 관심이 있음. 만약 ==String을 비교하면 내용이 같더라도 객체가 다르므로 메모리 주소도 달라 false가 나옴.

String hello = "hello";
String hello2 = "hello";
System.out.println(hello == hello2); // 출력값: false

equalsIgnoreCase() 메서드를 사용하면 대소문자 구분 없이 문자열의 내용을 비교 연산 할 수 있음.

profile
Back-end Engineer 👨‍💻
post-custom-banner

0개의 댓글