형변환
- 작은 범위에서 큰 범위로는 당연히 값을 넣을 수 있음
int
→long
→double
- 큰 범위에서 작은 범위로 올 때는 소수점을 버리거나, 오버플로우 같은 문제가 발생
자동 형변환
int intValue = 10;
double doubleValue;
doubleValue = intValue; //가능 (double)이 생략되어있음
doubleValue = (double) intValue; //double형으로 형변환, 윗 줄과 같은 코드임
작은 것을 큰 범위에 넣을 때는 자동으로 형변환이 된다.
명시적 형변환
: 큰 범위에서 작은 범위로 넣는 경우
double doubleValue = 1.5;
int intValue = 0;
// intValue = doubleValue; 컴파일 오류 발생
Incompatible types. Found: 'double', required: 'int'
형식이 맞지 않다는 오류 발생
소수점 날라가도 괜찮아! int로 변환하고 싶어!
double doubleValue = 1.5;
int intValue = 0;
intValue = (int) doubleValue; // int로 형변환
위와 같이 명시적으로 형을 입력해주고 변환하면 된다.
❓큰 범위의 수가 작은 범위를 넘어가면 어떡하지?
long maxIntOver = 2147483648L;
int intValue = 0;
intValue = (int) maxIntOver;
System.out.println(intValue);
지금 maxIntOver
변수가 int가 표현할 수 있는 범위를 넘어간다.
출력 결과는 -2147483648
전혀 다른 숫자가 표현되는데, 이런 현상을 오버플로우라 한다.
오버플로우가 발생하면 시계가 한바퀴 돈 것 처럼 작은 범위의 처음 범위부터 시작한다.
⭐그러나 오버플로우가 발생하는 것 자체가 문제!!
이런 경우는 대입하는 변수 intValue의 타입을 그냥 int
→ long
으로 변경해서 사이즈를 늘려주면 된다. 그냥 작은 타입을 유지할 필요 없이 큰 타입으로 변경해주도록 하자.
시계 돈 거 계산해서 숫자 찾지 말고 쉽게 쉽게 살자.
계산에서의 형변환
public class Div1 {
public static void main(String[] args) {
int div1 = 3 / 2;
System.out.println(div1);
double div2 = 3 / 2;
System.out.println(div2);
double div3 = 3.0 / 2;
System.out.println(div3);
double div4 = (double) 3 / 2;
System.out.println(div4);
}
}
- 같은 타입끼리의 계산은 같은 타입의 결과를 낸다.
- 서로 다른 타입의 계산은 큰 범위로 자동 형변환이 일어난다.
- int와 double의 계산은 double로 형변환된다.
div2
에서 div2의 형은 double이지만 int와 int의 계산이므로 int값이 들어가게 된다.
'Java를 자바' 카테고리의 다른 글
[Java] 배열 Array (0) | 2024.05.01 |
---|---|
[Java] Scanner(사용자 입력받기) (0) | 2024.04.30 |
[Java] 스코프 (2) | 2024.04.11 |
[Java] 반복문 | while, for (0) | 2024.04.11 |
[Java] 연산자 (0) | 2024.04.02 |