JAVA/JAVA 기초

[JAVA 기초]비교 연산자

큐범 2021. 7. 8. 17:12

대소비교 연산자 < > <= >=

 

비교연산자 연산결과
> 좌변 값이 크면, true 아니면 false
< 좌변 값이 작으면, true 아니면 false
>= 좌변 값이 크거나 같으면, true 아니면 false
<= 좌변 값이 작거나 같으면, true 아니면 false
   

등가비교 연산자 == !=

 

비교연산자 연산결과
== 두 값이 같으면, true 아니면 false
!= 두 값이 다르면, true 아니면 false
public static void main(String[] args) {
		System.out.printf("10 == 10.0f  \t %b %n", 10==10.0f);
		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');
	}
//결과
10 == 10.0f  	 true 
'0' == 0     	 false 
'A' == 65    	 true 
'A' > 'B'    	 false 
'A'+1 != 'B' 	 false
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("f =%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);
	}
//결과
10.0==10.0f true
0.1==0.1f false
f =0.10000000149011612
f =0.10000000000000000
d2=0.10000000149011612
d==f false
d==d2  false
d2==f  true
(float)d==f true

'10.0==10.0f'는 true인데 '0.1=0.1f'는 false이다. 그 이유는 정수형과 달리 실수형은 근사값으로 저장되기에 오차가 발생할 수 있다. 또한, float 0.1을 저장한 후 다시 double로 변경한다고 해서 double 0.1로 처음부터 저장한 value와는 같지 않다.

문자열 비교

문자열을 비교하기 위해서는 ==보다는 equals() 매서드를 사용해야 한다.

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(" str1 == \"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.equals(\"abc\") ? %b%n", str1.equalsIgnoreCase("ABC"));
	}
//결과
"abc"=="abc" ? true
str1 == "abc" ? true
str1 == "abc" ? false
str1.equals("abc") ? true
str2.equals("abc") ? true
str2.equals("abc") ? false
str2.equals("abc") ? true

str1은 "abc" 자체를 저장해서 "abc" 비교연산을 해도 true이나, str2는 String형태로 공간을 할당 후 저장하면 같은 "abc"임에도 false를 반환한다. 문자열을 비교할 경우 equals를 통해 비교해야한다. 또한, 대소문자를 구분한다. 대소문자를 구분하지 않고 비교를 원한다면 equalsIgnoreCase()를 사용해야한다.

 

출처 : JAVA의 정석 - (남궁성지음)