비교 연산자는 두 피연산자를 비교하는 데 사용되는 연산자다. 주로 조건문과 반목문의 조건식에 사용되며, 연산결과는 오직 true와 false 둥 줄의 하나이다
두 피연산자의 값의 크기를 비교하는 연산자이다
비교연산자 | 연산결과 |
---|---|
> | 좌변 값이 크면, true 아니면 false |
< | 좌변 값이 작으면, true 아니면 false |
>= | 좌변 값이 크거나 같으면, true 아니면 false |
<= | 좌변 값이 작거나 같으면, true 아니면 false |
두 피연산자의 값이 같은지 또는 다른지 비교하는 연산자이다.
기본형은 물론 참조형, 즉 모든 자료형에 사용할 수 있다.
비교연산자 | 연산결과 |
---|---|
== | 두 값이 같으면, true 아니면 false |
!= | 두 값이 다르면, true 아니면 false |
'두 값이 같다'는 의미로 '='가 아닌 '=='를 사용하는데, '='은 대입연산자 이기 때문이다.
public class OperatorEx22 {
public static void main(String[] args){
float f = 0.1f;
double d = 0.1;
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);
}
}
0.1f는 저장할 때 2진수로 변환하는 과정에서 오차가 발생한다. 그래서 d==f는 false가 나온다
두 문자열을 비교할 때는, 비교 연산자 '=='대신 equals()라는 메서드를 사용해야 한다.
equals()는 비교하는 두 문자열이 같으면 true를, 다르면 false를 반환한다.
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");//true
System.out.printf(" str1==\"abc\" ? %b%n", str1=="abc");//true
System.out.printf(" str2==\"abc\" ? %b%n", str2=="abc");//false
System.out.printf("str1.equals(\"abc\") ? %b%n",str1.equals("abc"));//true
System.out.printf("str2.equals(\"abc\") ? %b%n",str2.equals("abc"));//true
System.out.printf("str2.equals(\"ABC\") ? %b%n",str2.equals("ABC"));//false
System.out.printf("str2.equalsIgnoreCase(\"ABC\") ? %b%n",str2.equalsIgnoreCase("ABC"));//true
}
}
'=='는 서로 다른 객체라서 false 결과를 받지만 equals()는 객체가 달라도 내용이 같으면 true를 반환한다
만약 대소문자를 구별하지 않고 비교하고 싶으면, equals()대신 equalsIgnoreCase()를 사용하면 된다