- short 타입과 byte 타입을 연산하면 어떤 결과가 나올까?
Java에서 short나 byte와 같은 작은 정수형 타입은 산술 연산을 수행할 때 int 타입으로 자동으로 형변환된다.
(정수형 연산 시 발생하는 오버플로우(overflow)나 언더플로우(underflow)를 방지하기 위한 것)
예를 들어, short 타입 변수 s1과 s2를 더하면 결과는 int 타입으로 자동 형변환되며, 그 결과를 다시 short 타입 변수에 대입하려면 명시적인 형변환을 수행해야 한다.
short s1 = 100;
short s2 = 200;
// s1과 s2를 더하면 int 타입으로 자동 형변환되어 결과가 저장됨
short s3 = (short)(s1 + s2);
short s4 = s1 + s2; // 에러 발생.
byte b1 = 10;
byte b2 = 20;
// b1과 b2를 더하면 int 타입으로 자동 형변환되어 결과가 저장됨
byte b3 = (byte)(b1 + b2);
byte b4 = b1 + b2; // 에러 발생.
위 예시에서 s1과 s2를 더하면 결과는 int 타입으로 자동 형변환되어 short 타입 변수 s3에 대입하기 전에 명시적인 형변환을 해야한다.
byte 타입도 마찬가지로 int 타입으로 자동 형변환되어 연산이 수행되며, 그 결과를 다시 byte 타입 변수에 대입하기 전에 명시적인 형변환을 해야한다.
short와 byte가 int로 자동 형변환되는 이유는, JVM은 작은 정수형 타입인 short나 byte를 사용할 때 이를 32비트 크기인 int로 자동 형변환하라는 JVM의 명세에 따랐기 때문이다.