반응형
형변환은 변수나 상수의 데이터 타입을 다른 타입으로 바꾸는 것을 의미한다.
형변환에는 자동 형변환과 명시적 형변환이 있다.
1 자동 형변환
작성자가 별도의 작업을 하지 않아도 자바가 알아서 알맞은 타입으로 변환해 주는 것을 말한다.
작은 데이터 타입에서 큰 데이터 타입으로 형변환하여도 데이터의 손실 없이 그대로 보존될 수 있기 때문에 자동 형변환이 일어난다.
byte a = 127; // byte가 가질 수 있는 최댓값
int b = a;
System.out.println(b);
float c = b;
System.out.println(c);
결과
127
127.0
다음은 char 타입의 데이터 형 변환이다.
char ch = 'a';
int b = ch;
System.out.println(b);
결과
97
char타입은 문자형인데 어떻게 정수형으로 넣을 수 있을까?
답은 char 타입의 a가 int 타입으로 형변환 될 때 아스키코드값인 97로 저장되기 때문이다.
2 명시적 형변환
프로그래머가 변수의 자료형을 강제로 변환하는 것을 말한다.
큰 데이터 타입에서 작은 데이터 타입으로 옮길 때 데이터의 손실이 발생할 수 있기 때문에 예상치 못한 결과를 얻을 수 있다.
○ 정수형간의 형변환
int a = 263;
byte b = (byte)a;
System.out.println(b);
int i = 10;
byte j = (byte)i;
System.out.println(j);
결과
7
10
byte 타입은 저장할 수 있는 값의 범위가 -128~127이기 때문에 263을 넣었을 때 예상치 못한 값이 나온 것을 볼 수 있다.
○ 실수형간의 형변환
double d1 = 1.1234;
float f1 = (float)d1;
System.out.println(f1);
결과
1.1234
다음과 같이 범위 내 값에서 강제 형변환 할 경우 데이터의 손실없이 변환된다.
하지만 f1의 값이
float이 가질 수 있는 최소 값보다 작은 경우 0이 되고
float이 가질 수 있는 최대 값보다 큰 경우 무한대(infinity)가 된다.
또한 float의 범위 내 값이지만 소수점 아래 값에서의 정밀도 차이가 나기도 한다.
double d4 = 9.123456789;
float f4 = (float)d4;
System.out.println(f4);
결과
9.123457
○ 정수형과 실수형 간의 형변환
double a = 12345.15453;
int b = (int)a;
System.out.println(b);
결과
12345
실수형을 정수형으로 형변환시 소수점 이하 값은 버려진다.
반응형
'Java > Java 기초문법' 카테고리의 다른 글
[JAVA 기초] 연산자의 종류와 우선순위 (0) | 2021.02.26 |
---|---|
[JAVA 기초] 리터럴(literal) (0) | 2021.02.26 |
[JAVA 기초] 문자형 char와 문자열 String (0) | 2021.02.26 |
[JAVA 기초] 변수의 선언과 초기화, 식별자, 데이터 타입 (0) | 2021.02.24 |
[JAVA 기초] 자바 기본 출력문 "print, pritln" (0) | 2021.02.24 |
댓글