언어/JAVA

자바 기초문법 / 형변환

nakgopsae 2024. 6. 5. 15:46

자동 형변환

public static void main(String[] args) {
       int intValue = 10; // 제일 작음
       long longValue; // 중간
       double doubleValue; // 제일 큼
        // 작은 범위에서 큰 범위로 값을 넣을수 있다
        // 큰범위에서 작은 범위로 값을 넣는다면 소수점버림, 오버플로우가 발생한다

       longValue = intValue; // int -> long
       //long 변수에 int 값을 넣는다

        doubleValue = intValue; // int -> double
        
        doubleValue = 20L; // long -> double
        

        }

 

int -> long -> double 로 값을 넣을수 있다

 

작은 범위에서 큰 범위로의 대입은 자바 언어에서 허용한다

 

작은 범위에서 큰 범위로의 숫자타입 대입은 개발자가 직접적으로 형변환을 하지 않아도 자동적으로 변환된다.

 

이를 자동형변환 / 묵시적 형변환 이라고 한다


명시적 형변환

public static void main(String[] args) {
      //큰 범위에서 작은 범위로의 형변환
        double doubleValue = 1.5;
        int integerValue = 0;

        integerValue = doubleValue; // 오류난다
        integerValue = (int) doubleValue; 1.5 -> 1로
        }

 

int 는 double 보다 작고 소수점 아래자리를 표현할 수 없다.

 

이때 강제로 데이터타입을 변환 시킬수 있다 

 

이를 명시적 형변환이라고 한다

 

public static void main(String[] args) {
      //큰 범위에서 작은 범위로의 형변환
        double doubleValue = 1.5;
        int integerValue = 0;

        //integerValue = doubleValue; // 오류난다
        integerValue = (int) doubleValue;

        integerValue = (int) doubleValue;
        integerValue = (int) 1.5; //doubleValue에 있는 값을 읽는다.
        integerValue = 1; //(int)로 형변환 한다. intValue에 int형인 숫자 1을 대입한다.
        }

 

형변환을 한다고 해서 1.5의 값이 바뀌는 것이 아니라 int에서 읽을 수있는값인 1이 나오는것이다

 

doubleValue의 1.5의 값은 유지되며 변수의 값은 대입연산자를 통해 직접 대입할때만 변경된다


형변환과 오버플로우

public static void main(String[] args) {
        long maxIntValue = 2147483647;//Integer.MAX_VALUE;


        long maxIntOverValue = 2147483648L;// Integer.MAX_VALUE + 1
        int intValue = 0;

        intValue = (int) maxIntValue; //형변환
        System.out.println(intValue);// 2147483647

        intValue = (int) maxIntOverValue; // 형변환
        System.out.println(intValue); //-2147483648
		//-2147483648 숫자는 int 의 가장 작은 숫자이다
    }

 

long 타입 변수 인 maxIntOverValue를 int로 변환했을때 -값이 나온다 

 

int의 최고값을 넘어서기 때문에 표현을 못한다

 

기존 범위를 초과하여 표현하게 되면 전혀 다른 숫자가 표현되는데 이를 오버플로우라고 한다

 

오버플로우는 시계가 한바퀴 돈 것 처럼 다시 처음부터 시작한다 


계산과 형변환

public static void main(String[] args) {
        int div1 = 3/2; // 1
        //int 와 int 의 계산 결과는 int 이다

        double div2 = 3 / 2; // 1.0
        //변수가 double 로 선언되어있지만 int와 int의 계산결과가 int로 나온다
        //그러고 double로 타입이 바뀐다

        double div3 = 3.0 / 2; // 1.5
        // double 이랑 int의 계산결과는 double로 나온다

        double div4 = 3 / 2; // 1.5
        //(double) int / int - > double / double 이 된다
        int a =3;
        int b =2;
        double result = (double) a/b ;
        System.out.println(result);

    }

 

 

 

'언어 > JAVA' 카테고리의 다른 글

자바 기초문법/ 메소드 / 오버로딩 / 함수  (1) 2024.06.10
자바 기초문법 / 문자 <-> 숫자  (0) 2024.06.05
자바 기초문법 / 반복문  (0) 2024.06.05
scope/코드 블록  (0) 2024.06.05
자바 기초문법 / 조건문  (0) 2024.06.04