[JAVA] 자바 독학기 #4 - 정수 자료형들과 관련 연산자(feat. 얄팍한 코딩사전)
정수 자료형들과 관련 연산자
이번에도 자바스크립트와 다른 부분, 내가 헷갈리는 부분 위주로 정리를 해보려고 한다!
(내가 아는것 같으면서도 제대로 아는게 맞는지 가끔 자신이 없음🤨)
🔹 목차
🔹 정수 자료형
byte, short, int, long
각 자료형의 변수에 자료형을 초과하는 값을 담을 수 없음!
byte overByte1 = 128; // Error
큰 자료형에 작은 자료형의 값을 넣는 것은 가능
>> 묵시적 형변환이 일어남
byte byte1 = 100;
short short1 = 100;
short1 = byte1; // 100이란 값은 동일하지만 short 자료형으로 바뀜
들어갈 수 있는 값이라 하더라도, 작은 자료형에 큰 자료형의 값을 넣을 수는 없음!
>> 어떠한 조치를 취하면 넣을 수 있음
주의!
int의 범위를 벗어나는 수에는 리터럴의 끝에 l 이나 L 붙여줘야함
long _8b_long1 = 123456789123456789L
🔹 형변환 (Casting)
더 큰 자료형의 값을 더 작은 자료형의 변수에 넣어주는 경우
형변환을 이용하면 가능하다.
byte iAmByte;
int iAmInt = 100;
// 명시적 형변환
iAmByte = (byte) iAmInt;
하지만 담을 수 없는 크기의 값을 넣으면서 형변환을 하면 이상한 값이 들어가게 된다
byte iAmByte;
int iAmInt = 12334234;
// 명시적 형변환
iAmByte = (byte) iAmInt; // iAmByte에 이상한 값이 들어감
🔹 이항 연산자
부수효과가 없는 연산자
연산자들의 우선순위?
-, + 보다는 *, / 가 우선해서 괄호로 제어해야함
중요 - 1
int 끼리 연산하면 int를 반환한다.
-> long에 넣을 수 있음
-> 더 작은 변수에는 명시적 형변환해야 가능
두 변수를 더한 결과를 형변환 할 때?
int a = 1;
int b = 2;
short c = (short) (a + b); // 명시적 형변환
중요 - 2
byte 끼리의 합을 byte에 넣어줄 수 없고
short 끼리의 합을 short에 넣어줄 수 없음
byte byte1 = 1;
byte byte2 = 2;
short short1 = 1;
short short2 = 2;
// 아래는 모두 불가능!
byte byte3 = byte1 + byte2;
short short3 = short1 + short2;
// 아래는 가능
int int1 = byte1 + byte2;
int int2 = short1 + short2;
byte와 short 의 연산은 int를 반환하기 때문!
--> 그냥 int를 많이 쓰는 이유...
이외 특징들
- long 끼리의 연산은 long 반환
- 정수 자료형의 계산은 소수점 아래를 버림
byte int1 = 5/2; // int1 : 2
🔹 복합 대입 연산자
부수효과를 일으키는 연산자
a += b (a = a + b)
a -= b (a = a - b)
a *= b (a = a * b)
a /= b (a = a / b)
a %= b (a = a % b)
🔹 단항 연산자
+, -, x++, ++x, x--, --x
++, -- 는 값을 언제부터 변화시키는지 '시점'이 중요함
x++
- 반환: 값 그대로
- 부수효과: 1 증가
++x
- 반환: 1 증가한 값
- 부수효과: 1 증가
int int1 = 1;
int int2 = int1++; // int2: 1 (이 시점에서 1)
int int3 = ++int; // int3: 3 (이 라인으로 넘어올 때 int1은 2였는데 ++int 이므로 1 더해짐)
🔹 비교 연산자
a == b
a != b
a > b
a >= b
a < b
a <= b
연산자 우선순위 : https://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html