Java는 산술 연산시 피 연산자의 타입을 일치 시킨 후 연산을 진행합니다.
아래의 규칙이 적용됩니다.
규칙 1.
int 타입보다 작은 범위를 가지는 타입끼리의 연산은 int 형으로 암시적 형 변환후 연산을 수행하며, 당연히 int를 반환합니다.
byte + byte
int = (int)byte + (int)byte
byte + short
int = (byte) + (int)short
byte와 byte를 더하면, 두 byte를 int로 implicite type casting한 후 연산을 수행하고 int를 반환합니다.
따라서 byte 끼리의 연산 결과를 byte에 explicite type casting 없이 할당하면 오류가 발생합니다.
byte b1 = 5;
byte b2 = 10;
byte result = b1 + b2
incompatible types: possible lossy conversion from int to byte
규칙 2. int 이상의 타입과 연산시 피 연산자 중 큰 타입으로 자동으로 형 변환한 후 연산을 수행하며, 큰 타입을 반환합니다.
char + int:
int = (int)char + int
byte + long:
long = (long)byte + long
long + float:
float = (float)long + float