| 연산자 | 용도 | 설명 |
|---|---|---|
== |
동등 비교 | 두 피연산자의 값이 같은지 검사 |
!= |
부등 비교 | 두 피연산자의 값이 다른지 검사 |
> |
크다 | 왼쪽이 큰지 검사 |
>= |
크거나 같다 | 왼쪽이 크거나 같은지 검사 |
< |
작다 | 왼쪽이 작은지 검사 |
<= |
작거나 같다 | 왼쪽이 작거나 같은지 검사 |
비교 연산자도 산술 연산자와 마찬가지로 연산 전 타입을 일치시킨다.
'A' == 65: char 타입 ‘A’는 유니코드 값인 65로 변환되어 비교되므로 결과는 true3 == 3.0: 정수 3이 실수 3.0으로 변환된 후 비교되므로 결과는 true실수는 정밀도 차이가 발생할 수 있다.
float v1 = 0.1f;
double v2 = 0.1;
System.out.println(v1 == v2); // 결과: false!
float의 0.1과 double의 0.1은 실제 내부 이진수 값이 미세하게 다르기 때문이다. 이럴 때는 피연산자를 모두 float로 강제 형변환하거나, Double.compare()를 사용해야 안전하다.
String str1 = "자바";
String str2 = "자바";
String str3 = new String("자바");
System.out.println(str1 == str2); // true (동일한 리터럴 주소)
System.out.println(str1 == str3); // false (new로 생성된 다른 주소)
System.out.println(str1.equals(str3)); // true (내용물 자체가 같은지 비교)
문자열의 내용을 비교하고 싶을 때는 절대로 ==를 쓰지 말고, 반드시 .equals() 메소드를 사용하자.
instanceof 연산자와 함께 비교 연산이 더 강력해졌다. 타입 비교와 동시에 변수 선언까지 가능하다.
Object obj = "Hello";
if (obj instanceof String s && s.length() > 0) { // 타입 비교 + 변수 추출 + 논리 비교
System.out.println(s);
}
boolean이다.== 비교가 위험할 수 있다.== 대신 .equals()를 사용한다.