연산자(operator) : 연산을 수행하는 기호
피연산자(operand) : 연산자의 작업 대상 ( 변수, 상수, 리터럴, 수식 )
우선순위 | 종류 | 연산자 |
1순위 | 단항 연산자 | ++ -- + - ~ ! (type) |
2순위 | 산술 연산자 | * / %, + -, << >> |
3순위 | 비교 연산자 | < > <= >= instanceof, == != |
4순위 | 논리 연산자 | &, ^, |, &&, || |
5순위 | 삼항 연산자 | ? : |
6순위 | 대입 연산자 | = += -= *= /= %= <<= >>= &= ^= |= |
AND
를 의미하는 &
와 &&
가 OR
을 의미하는 |
, ||
보다 우선수위가 높다. 따라서, x < 0 || (x < 10 && x > 5) 이렇게 계산된다.산술변환은 연산 수행 직전에 발생하는 피연산자의 자동 형변환이다.
규칙 1. 두 피연산자의 타입을 같게 일치시킨다. (더 큰 타입으로)
큰 타입에서 작은 타입으로 형변환 시 원래의 값이 손실될 가능성이 있기 때문에, 두 피연산자의 타입 중 더 큰 타입으로 일치시킨다.
규칙 2. 피연산자의 타입이 int보다 작은 타입이면 int로 변환한다.
byte + byte 값을 byte 타입 변수에 저장하고자하면 값이 손실될 수 있다는 에러가 발생한다.
이는 int보다 작은 타입을 연산할 때 int로 산술변환되기 때문이다.
byte sum = (byte) (b1 + b2);
처럼 형변환을 해야 컴파일 에러를 막을 수 있다.