본문 바로가기
공부/java

자바 데이터 타입 변환(형변환)

by 샤샤샤샤 2023. 1. 22.

형변환 (데이터 타입 변환)

 

형변환은 자동형변환(묵시적)과 강제형변환(명시적)이 존재한다.

 

자동형변환은 프로그램이 코드를 해석하면서 알아서 상황에 맞춰 자동적으로 형식을 변환하는 것을 의미한다. 자동적으로 시행됨으로 사용자가 따로 신경쓸 것은 없다.

반대로 강제로 형변환을 사용할때는 숫자의 크기에 유의해야 한다.

작은 형식을 큰 형식으로 변환하는 과정은 큰 문제가 없지만, 큰 형식을 작은 형식으로 변환할 때 문제가 생긴다. 변환된 작은 형식에 할당된 용량으로 표현 불가능한 값일때, 값이 짤리거나 소수점이 사라지는 일이 생기기도 한다.

 

기본형들의 크기는 다음과 같다.

 

정수형: long(8byte) > int (4byte) > short(2byte) > byte (1byte)

실수형: double(8byte) > float(4byte)

 

큰 정수형 -> 작은 정수형 (표현범위 밖이면 이상한 값이 나옴)

실수형 -> 정수형 (소수점이 잘림. 3.14 -> 3)

정수형 -> 실수형 (문제 없음. 3 -> 3.0)

 

 

자동형변환의 공식.

서로 다른 형식의 연산의 경우, 차지하는 데이터가 더 많은 형식으로, 실수형이 존재한다면 실수형으로 변환된다.

ex) (int) * (double) = (double)

        int intNum = 10;
        //자동 형변환
        float floatNum = intNum;
        System.out.println( floatNum );

        System.out.println( floatNum * intNum ); //float형으로 변경됨.
        short shortNum = 5;
        System.out.println( shortNum * intNum );  //int형으로 변경됨.

 

문자열과 기본형이 산술연산으로 이어질 경우, 기본형 역시 문자열로 자동 변환된다.

ex) "흐흐" + 10 = 흐흐10

 

char -> int 의 변환의 경우

강제, 자동 둘다 가능.

 

강제적 변환

char myChar 'A';
int k = (int)myChar;               결과: 65 (아스키 코드표 참조)

 

자동적 변환

        char myChar = 65;
        int k = 5;
        System.out.println( k + myChar );        결과: 70

 

 

강제형변환 공식

형변환 연산자를 사용.

ex) int = (int) float

    float myFloat = 200.5;
    short myInt = (byte) myFloat;      결과: -24   ---- 뜬금없는 숫자가 나옴

byte형식은 2^(1*8)승, 즉, -128~127까지 표현가능하다. 헌데 200.5는 표현범위를 넘어선 숫자임으로 전혀 연관없는 숫자가 나온 것이다.

 

반면 만약 byte가 아니라 short였다면 결과는 소수점이 날아간 200이였을 것이다.

 

int -> char 변환

강제적 변환만 가능

 

 char myChar2 = (char)42;   결과 : * (아스키 코드 참조)

 

문자열 타입에서 문자 하나만 가져오기

charAt() 함수 이용

 

인덱스 :  0부터 순차적으로 붙인 번호.

 

        String str = "java programming is funny!";
        char c = str.charAt( 0 );
        System.out.println( c );               결과 : j
        
        c = str.charAt( 1 );
        System.out.println( c );               결과 : a

j에 0, a에 1, v에 2 ...이런 식으로 모든 문자에 순차적으로 숫자가 대응된다.

원하는 문자에 맞는 인덱스 번호를 찾아서

 

원래 문자열.charAt(인덱스번호)

이런 식으로 문자를 빼낸다.

 

 

문자열형을 만드는 다른 형태

       //클래스이름 객체이름 = new 클래스이름( 매개변수값 );
        String strA = new String("Happy Days~");
        System.out.println( strA );
        
        String strB = "Happy Days~";  //간단하게 선언할수 있도록 프로그램이 지원함.
        System.out.println(strB);

String가 클래스인것처럼, 모든 기본형 데이터 타입은 자바 프로그램에 기본적으로 내장된 클래스다.

'공부 > java' 카테고리의 다른 글

자바(java)의 연산(1)  (0) 2023.01.23
자바(java)의 버퍼 메모리  (0) 2023.01.23
자바(java)의 데이터 타입  (0) 2023.01.22
타임리프 사용법  (0) 2023.01.22
자바(java)의 출력 함수  (0) 2023.01.22