No. 01

 

 

비교 연산자(Comparison Operator)


변수나 상수의 값을 비교할 때 쓰이는 연산자로서 결과가 항상 true 또는 false인 논리값(boolean)이다.

비교하는 피연산자의 타입이 서로 다를 경우에는 자료형의 범위가 큰 쪽으로 자동 형변환하여 타입을 일치시킨 후에 비교한다.





No. 02

 

 

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


두 피연산자의 값의 크기를 비교하는 연산자이다. boolean을 제외한 기본형에 사용할 수 있지만, 참조형에는 사용할 수 없다.


예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Operator {
 
    public static void main(String[] args) {        
        //대소비교 연산자 < > <= >=
        
        //'A'유니코드:65, 'B'유니코드:66
        System.out.printf("'A' > 'B' \t 결과:%b%n", 'A' > 'B');
        System.out.printf("'A' < 'B' \t 결과:%b%n", 'A' < 'B');
        
        int x = 100;
        
        System.out.printf("x >= 100 \t 결과:%b%n", x >= 100);
        System.out.printf("x <= 10 \t 결과:%b%n", x <= 10);                    
 
    }//main
 
}//class
                                                                  Colored By Color Scripter


실행 결과

'A' > 'B' 결과:false

'A' < 'B' 결과:true

x >= 100 결과:true

x <= 10 결과:false


· 문자의 비교시에는 유니코드로 비교된다.




No. 03

 

 

등가비교 연산자  ==  !=


두 피연산자의 값이 같은지 또는 다른지를 비교하는 연산자이다. 참조형을 포함한 모든 자료형에 사용할 수 있다.

기본형의 경우 저장되어 있는 값을 비교하고 참조형의 경우 객체의 주소값을 비교한다.


◈ 예제1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Operator {
 
    public static void main(String[] args) {
        
        //등가비교 연산자 == !=
                
        System.out.printf("10 == 10.0f \t 결과:%b%n", 10 == 10.0f);//float형으로 자동현변환 후 비교됨
        System.out.printf("'1' == 1 \t 결과:%b%n", '1' == 1);    //문자'1'의 유니코드는 49                
        System.out.printf("'A'+1 == 'B' \t 결과:%b%n", 'A'+1 == 'B');
        
        int x = 100;
        System.out.printf("x != 100 \t 결과:%b%n", x != 100);//같지 않을 경우 true                    
 
    }//main
 
}//class
                                                                                               Colored By Color Scripter


실행 결과

10 == 10.0f 결과:true

'1' == 1            결과:false

'A'+1 == 'B' 결과:true

x != 100        결과:false


· 타입이 다를 경우 범위가 더 큰 쪽으로 자동 형변환되어 타입을 일치시킨 후 비교된다.



◈ 예제2 (문자열의 비교)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Operator {
 
    public static void main(String[] args) {
        
        //문자열의 비교
        String str1 = "Hello";
        String str2 = new String("Hello");
                
        System.out.printf("str1==\"Hello\\t결과:%b%n",str1=="Hello");
        System.out.printf("str2==\"Hello\\t결과:%b%n",str2=="Hello");
        
        //문자열 비교시에는 equals() 메소드를 사용해야 한다.
        System.out.printf("str2.equals(\"Hello\") \t결과:%b%n",str2.equals("Hello"));    
        
    }//main
 
}//class
                                                                           Colored By Color Scripter


실행 결과

str1=="Hello" 결과:true

str2=="Hello" 결과:false

str2.equals("Hello") 결과:true


str1과 str2 두개 다 "Hello"의 문자열을 저장하고 있다. 그럼에도 불구하고 결과 값이 다른이유는 str1의 경우는 String은 클래스이지만 특별한 경우로 기본자료형처럼 표현하여 사용할 수 있게 허용한다. 그래서 문자열과 비교에 결과 값이 생각한대로 잘 나온 것이고, str2의 경우는 정식 방법대로 new를 사용하여 객체를 생성하고 그안에 "Hello"라는 문자열을 저장하였다. 이럴 경우에는 str2에 직접적으로 "Hello"라는 문자열이 저장되는 것이 아니고 "Hello"라는 문자열이 저장된 주소가 저장되어 있다. 그래서 결과값이 false가 나온 것이다.

해결 방법으로는 앞선 String 메소드로 설명해 주었던 equals() 메소드를 사용하는 것이다. equals() 메소드의 경우 str2에 주소값이 저장되어 있는데 그 주소값으로 찾아가 그 안에 저장된 "Hello" 문자열과 비교해주는 메소드이다. 그러므로 문자열을 비교할 때 주소값이 저장되어 있는지 값이 저장되어 있는지 신경쓰지 않고 비교를 하려면 equals() 메소드를 사용하면 된다.




+ Recent posts