두 피연산자를 비교하는데에 사용됨. (주로 조건문이나 반복문의 조건식에 사용)
연산 결과는 true
또는 false
둘 중 한 가지임.
비교 연산자도 이항 연산자이므로 피연산자의 타입이 불일치할 경우, 큰 쪽을 기준으로 일치시킨 후에 비교 연산함.
<
, >
, <=
, >=
피연산자의 값의 크기를 비교함. boolean
을 제외한 모든 기본형에 사용 가능하고, 참조형에는 사용 불가능.
==
, !=
기본형 간의 비교: 피연산자에 저장되어 있는 값이 같은지/다른지 비교함.
참조형 간의 비교: 객체의 메모리 주소값을 비교하여 같은/다른 주소를 가리키고 있는지 비교함.
int
와 float
의 비교:
10 == 10.0f // true
좌변이 float
으로 형변환 되어도 데이터 손실이 없으므로 양변의 값이 같아서 true
가 반환됨.
double
과 float
의 비교:
0.1 == 0.1f // false
double
과 float
모두 실제 메모리에 2진수로 저장될 때는 각각 오차가 발생함. double
의 정밀도가 더 높아 오차가 작으므로 두 값은 달라질 수 밖에 없음.
따라서 double
과 float
을 비교하려면 double
을 float
으로 형변환시켜준 상태에서 하는게 좋음.
(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()
메서드를 사용하면 대소문자 구분 없이 문자열의 내용을 비교 연산 할 수 있음.