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 논리값
형변환은 무조건 컵에서 컵으로 옮기는 거라고 생각해보자
작은 컵에 큰 용량을 담으면 넘치고 (=데이터 손실)
큰 컵에 작은 컵에 담겨있던 용량을 담아도 괜찮은 것처럼