Backend/Java

Java - 형변환(Casting) 및 오버플로우(overflow), 언더플로우(underflow)

퐁고 2023. 2. 12. 21:41
반응형

형 변환(Casting)이란?

  • 값의 타입(data type)를 다른 타입으로 변환하는 것
  • 자동 형변환(묵시적)
    • 작은 타입이 큰 타입에 저장되는 경우 byte → int
  • 강제 형변환(명시적)
    • 큰 타입이 작은 타입에 저장되는 경우 int → byte 손실 발생

문자열 타입을 기본타입으로 변환

  • Integer.parseInt();
  • Double.parseDouble(); 등등..

기본 타입을 문자열로 변환

  • String.valueof();
  • Integer.toString();

 

오버플로우

  • 타입이 허용하는 최대값을 벗어나는 것

언더플로우

  • 타입이 허용하는 최소값을 벗어나는 것

오버플로우, 언더플로우가 실행되면 실행 에러가 되지않고 해당 정수 타입의 최소값 혹은 최대값으로 되돌아간다.

// 오버플로우
byte valueOver = 127; (1byte = 8bit, -28승 <= 값 <= 28승 - 1)
valueOver++;
System.out.println(valueOver);

// 언더플로우
byte valueLower = -128;
valueLower--;
System.out.println(valueLower);

위에 오버플로우가 된 valueOver의 값은 byte의 최소값인 -128,

언더플로우가 된 valueLower의 값은 byte의 최대값인 127이 출력된다.

즉, 다른 형인 short, int등 모두 똑같다. 고로 연산 과정에서 오버플로우 혹은 언더플로우가 일어 날 것 같다면 더 큰 타입으로 연산을 하도록 해야한다.