대소비교 연산자 < > <= >=
비교연산자 | 연산결과 |
---|---|
> | 좌변 값이 크면, 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의 정석 - (남궁성지음)