자바 도전기-8

김치전사·2021년 12월 30일
0

자바도전기

목록 보기
8/17

비교 연산자를 공부해봤다

비교 연산자는 두 피연산자를 비교하는 데 사용되는 연산자다. 주로 조건문과 반목문의 조건식에 사용되며, 연산결과는 오직 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()를 사용하면 된다

profile
개인공부 블로그입니다. 상업적 용도 X

0개의 댓글