JAVA

java_데이터타입(형변환)_22.05.19(day2)

양빵빵 2022. 5. 19. 15:33

 

 

 

 

 

 

 

 

package day02;

public class Casting1 {
    public static void main(String[] args) {
        byte a = 100; // 1바이트 할당

                int b = a; // a가 int로 자동 형 변환 (묵시적 형변환)

        double c = b; // 실수형 타입 c에 정수형 타입 b를 저장 하려고 함.
        System.out.println("c = " + c);// b를 double로 자동 형변환 하여 c에 저장
    }
}

 

 

 

 

 

 

 

package day02;

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

        // downcating : 하위 타입 변환

        // 0011 1110 1000 -> 10진수 1000을 이진수 변환
        int n = 1000;
        byte m = (byte) n; // n = int, m = byte; // 상위 타입변환 처럼 자동 형변환을 했을 경우 버리는 데이터가 발생.

        System.out.println("m = " + m); // -24가 출력 되는 이유는?
                                        // 다운캐스팅시 값의 손실이 일어날 수 있음.
        
        double k = 5.556;
        int j = (int) k; // (int) 는 형변환 연산자 이며 단항 연산자 이다.
        System.out.println("j = " + j); // 데이터 소실을 활용한 명시적 형변환 (소수점을 버리고 싶을때)

    }
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

package day02;

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

        // 타입이 작은 데이터의 연산에서는
        // 작은 쪽을 큰 쪽으로 변환한 후 연산을 진행

        int a = 10;
        short b = 30;
        int c = a + b ; // a와 b의 타입은 다르고 원래는 연산이 불가능!!
                        // 안정적인 형태로 변환한 후 연산.! (업캐스팅) -> 자바에서 b에 (int)를 넣어 자동 형변환을 진행 함

        char d = 'A'; // 2byte
        int e = 2; // 4byte
        System.out.println(d+e); // char의 업캐스팅 int로 형변환시 숫자 65가 되고
                                // int d = 65, int e = 100 -> d+e = 165 가 된다.

        // 문자열 + 숫자 = 문자열
        // 단일문자 + 숫자 = 숫자
        
        char f =(char) (d+e); // 'A' char의 단일문자로 연산시 숫자 변환 65 -> 65+2 = char 67;
        System.out.println("f = " + f);
        // 만약 A2로 출력 하고 싶다면
        // int e = 2; -> String e = "2"; 로 변경 하고
        // char f = (char) (d+e); -> String f = (d+e); -> 문자열 + 숫자열 = 문자열 A2

        System.out.println(3.0+5); // 8.0 업캐스팅

        /*
         int 보다 작은 데이터(byte, short, char) 끼리의 연산은
         결과가 자동으로 int로 변환되어 처리
         (스택 오버플로우, 언더플로우 방지)
         */
        byte b1 = 100;
        byte b2 = 120;

        int result = b2 + b1; // 곱하기 연산 으로 byte의 범위가 넘을수 있다.

        System.out.println('A' + 'B'); // 131 //'char' 단일문자
        System.out.println("A"+"B"); // AB // "String" 문자열

        // 문자열 + 숫자 = 문자열
        // 단일문자 + 숫자 = 숫자



        
    }
}