본문 바로가기

Java를 자바

[Java] 형변환

형변환

  • 작은 범위에서 큰 범위로는 당연히 값을 넣을 수 있음
    • intlongdouble
  • 큰 범위에서 작은 범위로 올 때는 소수점을 버리거나, 오버플로우 같은 문제가 발생

자동 형변환

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의 타입을 그냥 intlong 으로 변경해서 사이즈를 늘려주면 된다. 그냥 작은 타입을 유지할 필요 없이 큰 타입으로 변경해주도록 하자.

시계 돈 거 계산해서 숫자 찾지 말고 쉽게 쉽게 살자.

계산에서의 형변환

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