본문 바로가기

JAVA

JAVA의 형변환과 자료형타입

소수점을 표현하는 방식

  • 고정소수점 00.00 → 소수점의 길이나 바이트 수를 미리 제한해 놓은 것
  • 부동소수점 → 부호, 지수, 가수부의 영역만 정해 놓고 곱한 값을 저장해서 표현하는 방식 → 엄청 많은 수 표현 가능
    • 그렇기 때문에 float(4byte)여도 long(8byte)보다 더 큰 수를 표현할 수 있음

char과 String의 차이

  • char(byte)('')
    • 문자 뒤에 널문자(\0)가 없음, 1byte만 사용하기 때문
    • 기본형
  • String("")
    • 문자 뒤에 널문자 존재, 어디가 끝인지 알아야 되기 때문
    • 참조형

문자자료형 : 메모리는 이진수만 기록하므로 문자에 해당하는 유니코드값으로 매칭시켜 저장

 

기본형과 참조형 

  • 기본형 변수 : 원본값이 Stack 영역(정적영역 = 크기가 얼마인지 지정되어 있어야 함)으로 할당된 메모리 영역에 저장
  • 참조형 변수 : 원본값이 heap 영역에(동적영역 = 크기가 가변적임) 저장, heap영역의 원본 주소값을 저장함

 

형변환

  • 작은 타입에서 -> 큰 타입으로 형변환 : 자동으로 됨(up캐스팅)
  • 큰 타입에서 -> 작은 타입 형변환 : 값의 손실이 생김, 개발자가 직접 명시함(down캐스팅) 
public class Main {

    public static void main(String[] args) {
        // 변수 타입별 크기 순서
        // byte(1) -> short(2) -> int(4) -> long(8) -> float(4) -> double(8)

        // (1) byte -> int
        byte byteNumber = 10;
        int intNumber = byteNumber;
        System.out.println(intNumber);

        // (2) char(1byte) -> int(4) 형변환
        char alphabet = 'A';
        intNumber = alphabet; // char -> int로 자동 형변환
        System.out.println(intNumber);

        // (3) int -> double 형 변환
        intNumber = 200;
        double doubleNumber = intNumber;
        System.out.println(doubleNumber);

        // (4) double -> int 형 변환
        // 개발자가 명시적으로 형변환 = downcasting
        double d = 3.5;
        int a  = (int) d;
        System.out.println("강제 형변환 : " + a);

        // 큰 크기 타입으로 자동 형 변환
        int intNum = 10;
        double doubleNum = 5.5;
        double result = intNum + doubleNumber;
        System.out.println(result);

    }

}
  • 작은 크기 타입이 큰 크기의 타입이랑 계산될 때 자동으로 큰 크기의 타입으로 형 변환됨
public class Main {

    public static void main(String[] args) {
        int intNum = 10;

        // 1) 정수로 나누기
        int iResult = intNum / 4;
        // 2) 실수로 나누기
        double dResult = intNum / 4.0;

        System.out.println(iResult + " | " + dResult); // 2 | 2.5
    }

}