반응형
package day01;
// 형변환(typecasting)
// 형변환이란 특정 변수의 값 데이터타입을 강제로 변경해주는 것을
// 형변환이라고 한다.
// 형변환에는 2가지 종류가 있다.
// 1. 암시적 형변환(implicit typecasting)
// 암시적 형변환의 경우 더 큰 데이터타입에 더 작은 데이터타입의 값을 담아줄 때
// 자동으로 발생한다.
// 또한 정수형의 값을 실수형으로 변환할 때도 자동으로 발생한다.
// 이때는 우리가 별다른 명령어를 적어주지 않아도 자바가 알아서 해준다.
// 2. 명시적 형변환(explicit typecasting)
// 명시적 형변환의 경우 더 작은 데이터타입에 더 큰 데이터타입의 값을 담아줄 때
// 우리가 명시적으로 형변환하라고 명령어를 적어주어야 한다.
// 또한 명시적 형변환의 경우 더 작은 데이터타입이 표현할수 있는 범위를 넘어서면
// overflow나 underflow가 발생할 수도 있다.
// overflow: 값이 최대표현값을 넘어서서 오히려 최소값으로 가는 현상
// underflow: 값이 최소표현값을 넘어서서 오히려 최대값으로 가는 현상
public class Ex11TypeCasting {
public static void main(String[] args) {
byte myByte = 20;
int myInt = myByte;
//위의 코드에서는 암시적 형변환이 발생했다.
// myByte와 myInt의 자료형은 다르지만
// myInt는 32비트, myByte는 8비트 이기 때문에
// 아무런 문제없이 myByte의 값을 int로 변환 가능하다.
System.out.println("myInt의 현재값 : "+myInt);
//오버플로우 혹은 언더플로우가 발생하지 않는 명시적 형변환을 사용해보자.
//명시적 형 변환을 하는 방법은
// 저장할 변수 = (저장할 변수의 자료형)바꿀 값;
myInt = 80;
myByte = (byte)myInt;
System.out.println("myByte의 현재값 : "+ myByte);
//byte의 표현 범위는 -128부터 +127까지이기 때문에
//80을 byte로 바꾸어도 아무런 문제가 발생하지 않는다!
//overflow 경험해보기
myInt = 128;
myByte = (byte)myInt;
System.out.println("myByte의 현재값 : "+ myByte);
//underflow 경험해보기
myInt = -130;
myByte = (byte)myInt;
System.out.println("myByte의 현재값 : "+ myByte);
//명시적 형변환을 우리가
// int / int의 결과값을 double로 출력하고 싶다면 그때도 사용해야한다.
double mydouble = 3 / 5;
System.out.println("mydouble의 현재값: " + mydouble);
//위의 코드는 우리가 원하는 0.6이라는 값 대신 0.0이 나온다.
//왜냐면 int / int 가 되어서 결과값이 0이고 이 결과값 0 이 실수로 바뀌어 0.0이 되기 때문이다.
//그렇다면 우리가 원하는 0.6이라는 값을 받기 위해서는 int / int가 아닌
// int / double이 실행되어야 한다.
// 이럴때 int를 형변환 해서 double로 바꿔주면 된다!
mydouble = 3 / (double)5;
System.out.println("mydouble의 현재값: " + mydouble);
}
}
더보기
myInt의 현재값 : 20
myByte의 현재값 : 80
myByte의 현재값 : -128
myByte의 현재값 : 126
mydouble의 현재값: 0.0
mydouble의 현재값: 0.6
반응형
'Dev > Java' 카테고리의 다른 글
Java - 제어문 ( If ) (0) | 2020.08.11 |
---|---|
Java - 하드코딩 ( HardCoding ) (0) | 2020.08.10 |
Java - 입력 ( Scanner ) (0) | 2020.08.10 |
Java - 출력 ( printf ) (0) | 2020.08.10 |
Java - 출력 ( Print ) (0) | 2020.08.10 |