티스토리 뷰

IT/Java

비교 연산자

오예봉봉 2020. 4. 16. 23:45

개념


비교 연산자에는 동등 비교 연산자(=,!=) , 대소(<,>,<=,>=) 비교 연산자가 있습니다.
대소 비교 연산자는 boolean 타입을 빼고 나머지 기본 타입에 사용 가능합니다. 
등등 비교 연산자는 모든 타입에서 사용 가능합니다. 비교 연산자는 주로 제어문(if, for , while)에서 흐름 제어 조건에 자주 사용됩니다.


                         a = b

 a 와 b가 동일한지를 검사합니다.

                         a != b

 a 와 b가 다른가를 검사합니다.

                         a > b

 a 가 b 보다 큰가를 검사합니다.

                         a>=b

 a 가 b 보다 크거나 동일한지를 검사합니다.

                         a<b

 a 가 b 보다 작은가를 검사합니다.

                        a<=b

 a 가 b 보다 작거나 동일한지를 검사합니다.

 

피연산자가 char 타입이라면 unicode 값으로 비교 연산을 수행합니다. 즉 'A' 의 유니코드 는 65 이고 'B' 의 유니코드는 60 입니다. 따라서 , 65 와 66 을 대소 비교합니다. ('A' < 'B') 를 (65 < 66 )와 같은 방식으로 비교합니다. 비교 연산자 예제를 봅시다.

public class Example {

public static void main(String[] args) {

int number1 = 10;

int number2 = 10;

boolean result1 = (number1 == number2); 

boolean result2 = (number1 != number2); 

boolean result3 = (number1 <= number2);


System.out.println("result1=" + result1);

System.out.println("result2=" + result2);

System.out.println("result3=" + result3);

char char1 = 'A';

char char2 = 'B';

boolean result4 = (char1 < char2);


System.out.println("result4=" + result4);

}

}


실행 결과는 다음과 같습니다.

result1 = true

result2 = false

result3 = true

result4 = true 


비교 연산자에서도 피연산자의 타입이 일치 되어야 합니다. 따라서 , 연산 전에 타입 변환이 필요합니다. 다음 예제를 봅시다.

1. 'A' == 65 ;

2. 1 ==  1.0 ;


1행은 A가 int 타입으로 바뀌어 65==65 인가를 비교합니다. 2행은 3이 실수인 double 타입으로 변환 후에 1.0 == 1.0 인가를 비교합니다.

다음 예제를 봅시다.


1. public class Example {

2. public static void main(String[ ] args) {

3. int a2 = 1;

4. double a3 = 1.0;

5. System.out.println(a2 == a3);                           //true

6.

7. double a4 = 0.1;

8. float a5 = 0.1f;

9. System.out.println(a4 == a5);                           //false

10. System.out.println((float)a4 == a5);                    //true

11. System.out.println((int)(a4*10) == (int)(a5*10));     //true

12. }

13. }


9행의 (a4 == a5) 는 왜 true가 아닐까요? a5 의 값인 0.1f 가 좌측 피연산자 타입인 double로 바뀌어 0.1 == 0.1 이 되는 것이 아니기 때문입니다. 왜냐하면 이진 포맷 형태의 가수를 사용하는 부동소수점 방식은  0.1을 정확히 표현 할 수 없기 때문입니다. 따라서 , 10행과 같이 float 타입으로 강제 타입 변환(casting)을 하거나 11행과 같이 두 피연산자를 모두 int 타입으로 변환하여 비교 연산 할 수 있습니다. 


'IT > Java' 카테고리의 다른 글

비트 연산자  (0) 2020.04.20
논리 연산자  (0) 2020.04.18
문자열 결합 연산자  (0) 2020.04.15
산술 연산자  (0) 2020.04.14
단항 연산자 (2)  (0) 2020.04.13