// ⚠️ 자료형의 범주 외의 수를 담을 수 없음
byte overByte1 = 127;
// byte overByte2 = 128; //불가!!!
byte overByte3 = -128;
// byte overByte4 = -129; //불가!!!
※ 자료형의 범위를 넘어가도록 숫자를 더하거나 뺄 경우 문제 발생!
→ 변수 초기화 시에는 범위를 넘어가는 값은 컴파일러 선에서 넣지 못하게 했는데 위의 예시처럼 초기화 후에는 컴파일러가 감히 판단하지 않아서 범위를 넘어가서 예상과 다른 값을 가져도 컴파일 상으로 오류는 나타나지 않게되므로 주의해야함!
▶큰 자료형에 작은 자료형의 값을 넣을 수 있지만 (묵시적 형변환) 작은 자료형에 큰 자료형의 값을 '그냥' 넣을 수는 없음 → 형변환 필요!
// 큰 자료형에 작은 자료형의 값을 넣을 수 있음
// 💡 묵시적(암시적) 형변환
_2b_short = _1b_byte;
// byte였던 1이 short 변수의 값으로 들어가 short 자료형의 1로 바뀜
// 값은 동일하지만 담기는 통의 크기가 달라졌다는 의미
_4b_int = _1b_byte; _4b_int = _2b_short;
_8b_long = _1b_byte; _8b_long = _2b_short; _8b_long = _4b_int;
// ⚠️ 작은 자료형에 큰 자료형의 값을 '그냥' 넣을 수 없음
// 들어있는 값의 크기와 무관
// _1b_byte = _2b_short; _1b_byte = _4b_int; _1b_byte = _8b_long; //불가!!!
// _2b_short = _4b_int; _2b_short = _8b_long; //불가!!!
// _4b_int = _8b_long; //불가!!!
▶int 범위를 벗어나는 수에는 리터럴에도 명시해줘야 함
long _8b_long = 4; //사실 int인 4가 묵시적 형변환으로 들어가 있는것.
//끝에 L이 안붙으면 long이 아님
// ⭐ int의 범위를 벗어나는 수에는 리터럴에도 명시 필요
// 끝에 l 또는 L을 붙이기 (L 권장)
long _8b_long1 = 123456789123456789L;
▶자바 7부터는 가독성을 위해 _를 사용하여 아래와 같이 표현 가능 (리터럴 쪽)
int _4b_int2 = 123_456_789;
long _8b_long2 = 123_456_789_123_456_789L;
형변환 casting
▶ 명시적(강제) 형변환 : 작은 자료형에 큰 자료형의 값을 '형변환'하여 넣음
byte byteNum;
int smallIntNum = 123;
// byte보다 int가 큰데 int를 강제로 byte로 형변환
byteNum = (byte) smallIntNum;
※ 강제로 범주 외의 값을 넣은 경우에는 값이 손실됨!
정수 자료형의 연산
▶ byte와 short의 연산은 byte나 short가 아닌 int를 반환함!
byte b1 = 1;
byte b2 = 2;
short s1 = 1;
short s2 = 2;
// ⚠️ 아래는 모두 불가
// byte b3 = b1 + b2;
// short s3 = b1 + b2;
// short s4 = b1 + s2;
// short s5 = s1 + s2;
// ⭐ byte와 short의 연산들은 int 반환
// 그냥 int를 많이 쓰는 이유 중 하나
int i1 = b1 + b2;
int i2 = s1 + s2;
int i3 = b1 + s1;
💡 int를 널리 사용하는 기타 이유들 - 자바 (및 다수 언어들) 에서 기본 자료형으로 지정됨 → 라이브러리와 API 등에서 사용됨 - 다른 언어들과 호환 (널리 사용되는 자료형) - 연산 속도가 타 자료형보다 빠름 → 32비트 ( 4바이트 ) : 대부분의 CPU에서 처리하기 적합한 크기