1. 비교 연산자
비교 연산자는 두 피연산자를 비교하는 데 사용되는 연산자며, 연산결과는 오직 true와 false이다.
비교 연산자는 피연산자의 타입을 일치시킨 후 비교하기에, 비교하는 피연산자의 타입이 서로 다를 경우, 자료형의 범위가 큰 쪽으로 자동 형변환한다.
2. 대소비교 연산자(<, >, <=, >=)
두 피연산자의 값의 크기를 비교하는 연산자다. boolean형과 참조형을 제외한 자료형에 사용할 수 있다.
비교연산자 | 연산결과 |
< | 좌변 값이 크면, true 아니면 false |
> | 좌변 값이 작으면, true 아니면 false |
<= | 좌변 값이 크거나 같으면, true 아니면 false |
>= | 좌변 값이 작거나 같으면, true 아니면 false |
3. 등가비교 연산자(==, !=)
두 피연산자의 값이 같은지 다른지 비교하는 연산자다. 모든 자료형에 사용할 수 있다.
* 기본형과 참조형은 서로 형변환이 불가하기에 등가비교 연산자로 기본형과 참조형을 비교할 수는 없다.
비교연산자 | 연산결과 |
== | 두 값이 같으면, true 아니면 false |
!= | 두 값이 다르면, true 아니면 false |
- 예제 OperatorEx21.java
public class OperationEx21 {
public static void main(String[] args) {
System.out.printf("10 == 10.f \t %b%n", 10 == 10.f);
System.out.printf("'0' == 0 \t %b%n", '0' == 0);
System.out.printf("'A' == 65 \t %b%n", 'A' == 65);
System.out.printf("'A' > 'B' \t %b%n", 'A' > 'B');
System.out.printf("'A' + 1 != 'B' \t %b%n", 'A' + 1 != 'B');
}
}
- 예제 OperatorEx22.java
public class OperationEx22 {
public static void main(String[] args) {
float f = 0.1f; // f에 0.1000000014490116612로 저장
double d = 0.1; // d에 0.1000000000000000000로 저장
double d2 = (double)f;
System.out.printf("10.0 == 10.0f %b%n", 10.0 == 10.0f);
System.out.printf("0.1 == 0.1f %b%n", 0.1 == 0.1f);
System.out.printf("f = %19.17f%n", f);
System.out.printf("d = %19.17f%n", d);
System.out.printf("d2 = %19.17f%n", d2);
System.out.printf("d == f %b%n", d == f);
System.out.printf("d == d2 %b%n", d == d2);
System.out.printf("d2 == f %b%n", d2 == f);
System.out.printf("(float)d == f %b%n", (float)d == f);
}
}
4. 문자열의 비교
두 문자열을 비교할 때는, 비교 연산자 대신 'equals()'라는 메서드를 사용해야 한다.
* 비교 연산자는 두 문자열이 완전히 같은 것인지 비교만 하기 때문
- 예제 OperatorEx23.java
public class OperatorEx23 {
public static void main(String[] args) {
String str1 = "abc";
String str2 = new String("abc");
System.out.printf("\"abc\"==\"abc\" ? %b%n", "abc" == "abc");
System.out.printf("str1 ==\"abc\" ? %b%n", str1 == "abc");
System.out.printf("str2 ==\"abc\" ? %b%n", str2 == "abc"); // 참조자료. 주소값 비교
System.out.printf("str1.equals(\"abc\") ? %b%n", str1.equals("abc"));
System.out.printf("str2.equals(\"abc\") ? %b%n", str2.equals("abc"));
System.out.printf("str2.equals(\"ABC\") ? %b%n", str2.equals("ABC"));
System.out.printf("str2.equalsIgnoreCase(\"ABC\") ? %b%n", str2.equalsIgnoreCase("ABC"));
}
}
str2와 "abc"의 내용은 같지만 서로 다른 객체이기에 '=='의 값은 false이다. equals()로 비교하면 true가 나온다. 대소문자를 구별하지 않고 비교하고 싶으면 equalsIgnoreCase()를 사용하면 된다.
참고문헌 : 남궁성(2016), Java의 정석, 도우출판