1. 데이터 타입. 자료형에 따른 연산
|
1
2
3
4
5
6
7
8
9
10
11
12
|
class DataTypeTest
{
public static void main(String[] args)
{
short num1 = 10;
short num2 = 20;
short result = num1 + num2;
// ↑ short result = (short)(num1+num2) 아니면
// ↑ int result = num1+num2 라고 해준다.
}
}
|
cs |
- short는 2바이트
- 큰 자료형에서 작은 자료형으로 자동 형변환이 일어나지는 않는다. 그렇기 때문에 int보다 자료형이 작은 short형으로 자동 형변환이 일어나지 않기 때문에 (short)(num1+num2)를 해주거나 short result가 아닌 int result 로 줘야 한다. (그니까 그냥 처음부터 정수 자료형을 short가 아닌 int로 주는 것이 낫다.)
(2)
|
1
2
3
4
5
6
7
8
9
10
|
class DataTypeTest
{
public static void main(String[] args)
{
int num1 = 3;
short num2 = 5;
int result = num1 + num2;
result = num1 + (int)num2;
}
}
|
cs |
- int num1은 0 ~~~~~~~~~~~~ 0 0 0 0 0 1 1 1
short num2는 0 ~~~~~ 0 0 0 0 0 1 0 1
자료형을 맞춰주어야 연산이 가능하다.
이 때에 자료형의 손실 즉, 데이터의 손실 가능성이 있기 때문에 자료형이 큰 것을 작은 것으로 바꾸기 보다는 자료형이 작은 것을 큰 것으로 바꿔주는 것이 좋다.
- 큰 자료형에서 작은 자료형으로는 자동 형변환이 일어나기 때문에 int result = num1 + num2;에서 short num2는 자동으로 자료형이 int가 되었지만 작은 자료형에서 큰 자료형으로 자동 형변환이 일어나지 않기 때문에 result = num1 + (int)num2; 에서 num2의 자료형을 강제로 int로 준 것이다.
2. 자료형의 크기 비교
byte > short > int > long > float > double
char
- boolean은 자동 형변환 일어나지 않는다.
- long은 8바이트 float은 4바이트지만 실수의 범위 안에 정수가 있기 때문에 float 안에 long이 포함되어 float의 자료형의 크기가 더 크다.
|
1
2
3
4
5
6
7
8
9
10
|
class DataTypeTest
{
public satic void main(String[] args)
{
int num = (int)4.5;
long num2 = 10000000000L;
float num3 = 4.5F;
}
}
|
cs |
- int num = (int)4.5;
4.5는 실수형 상수이기 때문에 정수형 자료형인 int를 바로 사용할 수 없다. 그렇기 때문에 int num = 4.5; 가 아닌 int num = (int)4.5; 으로 준다.
- long num2 = 10000000000L;
기본적으로 정수형 상수는 int로 처리하기 때문에 long num2라고 자료형을 long으로 주었다고 해도 int에 10000000000 을 저장한 다음 long으로 형변환을 해주어야 하는데 int의 범위를 넘어가는 값이기 때문에 그냥 10000000000 으로 적으면 에러가 난다.
그렇기 때문에 10000000000가 아닌 10000000000L로 적어준다. (소문자보다 대문자가 가독성이 좋아서 대문자를 쓴다고 함)
- float num3 = 4.5;
기본적으로 실수형 상수는 double로 처리하기 때문에 double보다 더 작은 자료형인 float은 에러가 발생한다. 그렇기 때문에 float num3 = 4.5; 가 아닌 float num3 = 4.5F; 로 준다.
- 정수형 상수는 int로 처리
- 실수형 상수는 double로 처리
'Java > Day4' 카테고리의 다른 글
| [Java] 사용자 정의 메소드 & 예문 (0) | 2021.11.04 |
|---|---|
| [Java] 삼항 연산자 & short circuit evaluation (0) | 2021.11.04 |
| [Java] 비트 연산자 (0) | 2021.11.04 |
| [Java] switch case 구문 (0) | 2021.11.03 |