public static void main(String[] args){
short s=7;
byte b=9;
long k=10;
int x=s+b;
long y=k+s;
}
Java는 전세계 주요국가의 문자를 수용할 수 있으므로,
영미권 위주의 ASCII(영미권 중심, 1Byte)보다 확장된 Unicode(전 세계 문자 지원, 2Byte)
Java에서 int보다 작은 자료형(byte, short, char)의 연산은 자동으로 int로 형변환됨
long은 예외
long은 int보다 크기 때문에 연산시 자동으로 int로 변환되지 않고, 결과도 long으로 유지
Java 컴파일러는 산술 연산의 기본을 32비트(int) 로 정해서 최적화했기 때문
char + char는 자동으로 int로 형변환되어 연산됨short a=3;
short b=9;
short c=(short)(a+b); 강제 형변환하던지
int c=a+b; c를 int로 자동 형변환하던지
<참고>
byte 1 바이트 -2¹⁷ ~ 2¹⁷ - 1
short 2 바이트 -2¹⁵ ~ 2¹⁵ - 1
int 4 바이트 -2³¹ ~ 2³¹ - 1
long 8 바이트 -2⁶³ ~ 2⁶³ - 1
float 4 바이트 단정도 부동소수점
double 8 바이트 배정도 부동소수점
char 2 바이트 0 ~ 2¹⁶ - 1 (즉, 0 ~ 65,535) 유니코드 문자
boolean 1 바이트 true 또는 false 논리값
형변환은 무조건 컵에서 컵으로 옮기는 거라고 생각해보자
작은 컵에 큰 용량을 담으면 넘치고 (=데이터 손실)
큰 컵에 작은 컵에 담겨있던 용량을 담아도 괜찮은 것처럼