본문 바로가기

Studying/JAVA

[JAVA]_Casting(형변환)

1. 형변환 (Casting, Type Conversion)

 

- 작은 범위에서 큰 범위로는 당연히 값을 넣을 수 있음 : int → long → double

- 큰 범위에서 작은 범위는 문제가 발생할 수 있음 : 소수점 버림, 오버플로우

 

package casting;

public class Casting1 {
    public static void main(String[] args) {

        int intValue = 10;
        long longValue;
        double doubleValue;

        longValue = intValue;   // int → long
        System.out.println("longValue = " + longValue);

        doubleValue = intValue; // int → double
        System.out.println("doubleValue = " + doubleValue);

        doubleValue = 20L;  // long → double
        System.out.println("doubleValue2 = " + doubleValue);
    }
}

[Casting1]

 

자동 형변환 (= 묵시적 형변환)

- 작은 범위에서 큰 범위에 값을 대입할 때 사용.

- 작은 범위 숫자 타입에서 큰 범위 숫자 타입으로의 대입은 개발자가 직접 형변환 하지 않아도 자동으로 일어남.


package casting;

public class Casting2 {
    public static void main(String[] args) {
        
        double doubleValue = 1.5;
        int intValue = 0;
        
        // intValue = doubleValue; // 컴파일 오류 발생
        intValue = (int) doubleValue;   // 명시적 형변환

        System.out.println("intValue = " + intValue);   // 소수점 사라지고 정수만 출력.
    }
}

[Casting2]

 

명시적 형변환

- 큰 범위에서 작은 범위에 값을 대입할 때 사용.


package casting;

public class Casting3 {
    public static void main(String[] args) {

        long maxIntValue = 2147483647;  // int 최고값
        long maxIntOver = 2147483648L;  // int 최고값 + 1 (초과)
        int intValue = 0;

        intValue = (int) maxIntValue;   // 형변환 (longg → int)
        System.out.println("maxIntValue casting = " + intValue);

        // int의 범위를 넘어서면 int의 가장 작은 범위부터 시작하여 출력.
        intValue = (int) maxIntOver;    // 형변환
        System.out.println("maxIntOver casting = " + intValue);
    }
}
maxIntValue casting = 2147483647
maxIntOver casting = -2147483648

[Casting3]

 

형변환 할 때 작은 숫자가 표현할 수 있는 범위를 넘어서면 가장 작은 범위부터 시작하여 출력하게 됨.


package casting;

public class Casting4 {
    public static void main(String[] args) {

        int div1 = 3 / 2;
        System.out.println("div1 = " + div1);   // 1

        double div2 = 3 / 2;
        System.out.println("div2 = " + div2);   // 1.0

        double div3 = 3.0 / 2;
        System.out.println("div3 = " + div3);   // 1.5

        double div4 = (double) 3 / 2;
        System.out.println("div4 = " + div4);   // 1.5

        int a = 3;
        int b = 2;
        double result = (double) a / b;
        System.out.println("result = " + result);   // 1.5
    }
}

[Casting4]

 

자바에서 계산은 다음 2가지를 기억하자.

1. 같은 타입끼리의 계산은 같은 타입의 결과를 냄.

2. 서로 다른 타입의 계산은 큰 범위로 자동 형변환이 일어남.

 

'Studying > JAVA' 카테고리의 다른 글

[JAVA]_Array(배열)  (1) 2024.12.09
[JAVA]_Scanner(스캐너)  (1) 2024.12.05
[JAVA]_Scope(스코프)  (0) 2024.12.03
[JAVA]_Loop Statement(반복문)  (0) 2024.12.03
[JAVA]_Conditional Statement(조건문)  (2) 2024.11.29