본문 바로가기
자바

자바 정리 - (3) 연산자

by 16비트 2023. 1. 17.

1. 연산자의 종류

종류 연산자 설명
산술 연산자 + -*/% 사칙 연산과 나머지 연산(%)
비교 연산자 ><>=<= == != 크고 작음과 같고 다름을 비교
논리 연산자 && | | ! & | A^~ and와 or 조건을 연결
대입 연산자 = 우변의 값을 좌변에 저장
기타 (type) ?: instanceo 형변환 연산자, 삼항 연산자, instanceof연산자

 

2. 연산자의 결합규칙

-  산술 〉 비교 〉 논리 〉 대입 순서로 대입 연산자는 제일 마지막에 수행된다.
-  단항(1) > 이항(2) > 삼항(3). 단항 연산자의 우선순위가 이항 연산자보다 높다.
- 단항 연산자와 대입 연산자를 제외한 모든 연산의 진행방향은 왼쪽에서 오른쪽이다.

 

3. 증감 연산자 ++와 --

증가 연산자(++) 피연산자의 값을 1 증가시킨다. 
감소 연산자(--) 피연산자의 값을 1 감소++i; // 

 

++i ; 전위형  : i의 값을 1 증가시킨다. 
i++; 후위형 : 값이 참조된 후에 증가시킨다.

class Ex {
    public static void main(String args[]) { 
        int i=5, j=0;
        j = i++;
        System.out.println("j=i++; 실행 후, i=" + i +", j="+ j);
        i=5;   // 결과를 비교하기 위해, i와 j의 값을 다시 5와 0으로 변경
        j=0; 
        
        j = ++i;
        System.out.println("j=++i; 실행 후, i=" + i +", j=" +j);
    }
}

 

4. 형변환 연산자

형변환이란, 변수 또는 상수의 타입을 다른 타입으로 변환하는 것이다. 

double d = 85.4; 
int score = (int)d; //int로 형변환

 

5. 자동형변환

표현범위가 좁은 타입에서 넓은 타입으로 형변환하는 경우에는 값 손실이 없으므로 두 타입 중에서 표현범위가 더 넓은 쪽으로 형변환된다. 변수가 저장할 수 있는 값의 범위보다 더 큰 값을 저장하려는 경우에 형변환을 생략하면 에러가 발생한다.

byte b = 1000;  // 에러. byte타입의 범위(-128 〜 127)를 벗어난 값의 대입
byte b = (byte)1000; // OK. 그러나 값 손실이 발생해서 변수 b에는 -24가 저장됨.

 

6. 산술 변환

(1) 두 피연산자의 타입을 같게 일치시킨다.(보다 큰 타입으로 일치)

long + int ㅡ> long + long ㅡ> long

float + int ㅡ> float + flaot ㅡ> float

double + float ㅡ> double + double ㅡ> double

 

(2) 피연산자의 타입이 int보다 작은 타입이면 int로 변환된다.

byte + short ㅡ> int + int ㅡ> int 
char + short ㅡ> int + int ㅡ> int

class Ex {
    public static void main(String args[]) { 
        long a = 1_000_000 * 1_000_000; 
        long b = 1_000_000 * 1_000_000L;
        
        System.out.println("a="+a); // a = -727379968 오버플로우 발생!!
        System.out.println("b="+b); // b = 1000000000000 
    } 
}

 

7. 나머지 연산자 %

나머지 연산자는 나누는 수로 음수도 허용한다.

class Ex {
    public static void main(String[] args) {
        System.out.printin(-10%8); // -2
        System.out.printin(10%-8); // 2
        System.out.printin(-10%-8); // -2
    }
}

 

8. 비교 연산자

대소비교연산자 〈, 〉, 〈, =, 〉, =

등가비교 연산자 ==, !=

문자열 비교에서 equals()는 두 문자열의 내용이 같으면 true, 다르면 false를 결과로 반환

class Ex {
    public static void main(String[] args) { 
        String strl = "abc";
        String str2 = new String("abc"); 
        
        System.out.printf("\"abc\"==\"abc\" ? %b%n", "abc"=="abc"); // true
        System.out.printf("\"strl==\"abc\" ? %b%n"? "abc"=="abc"); // true
        System.out.printf(" str2==\"abc\" ? %b%n",  str1=="abc"); // false
        System.out.printf("strl.equals(\"abc\") ? %b%n", strl.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
    }
}

 

9. 논리 연산자

II (OR결합) 피연산자 중 어느 한 쪽이 true이면 true를 결과로 얻는다. 
&& (AND결합) 피연산자 양쪽 모두 true이어야 true를 결과로 얻는다.

 

(1)  x는 10보다 크고, 20보다 작다. => 10 < x && x < 20

(2) i는 2의 배수 또는 3의 배수이다. => i%2==0 || i%3==0

(3) i는 2의 배수 또는 3의 배수지만 6의 배수는 아니다. => ( i%2==0 || i%3==0 ) && i%6!=0

(4) 문자 ch는 숫자('0'~'9')이다. => '0' <= ch && ch <= '9'

 

- 논리 부정 연산자 

ch < ’a' || ch > 'z' 와 !('a' <= ch && ch <= 'z')는 같은 의미이다.

class Ex {
    public static void main(String[] args) { 
        boolean b = true;
        
        System.out.printf("b=%b%n", b);         // true
        System.out.printf("!b=%b%n", !b);    // false
        System.out.printf("!!b=%b%n", !!b);  // true
    }
}

 

'자바' 카테고리의 다른 글

자바 정리 - (2) 배열  (0) 2023.01.16
자바 정리하기 - (1) 변수  (0) 2023.01.10

댓글