본문 바로가기

Java/기초

[Java] 형변환

1. 형변환(캐스팅, casting)이란?

변수 또는 상수의 타입을 다른 타입으로 변환하는 것

int타입의 값과 float타입의 값을 더하는 경우, 먼저 두 값을 같은 타입으로 즉, 둘 다 float타입으로 변환한 다음에 더해야 한다.

2. 형변환 방법

(타입)피연산자 ex. int score = (int)85.4;

변 환 수 식 결 과
int -> char (char)65 'A'
char -> int (int)'A' 65
float -> int (int)1.6f 1
int -> float (float)10 10.0f

float타입의 값을 int타입으로 변환할 때 소수점 이하의 값은 반올림이 아닌 버림으로 처리된다.

3. 정수형간의 형변환

큰 타입에서 작은 타입으로의 변환, 예를 들어서 int타입(4 byte)의 값을 byte타입(1 byte)으로 변환하는 경우는 아래와 같이 크기의 차이만큼 잘려나간다. 그래서 경우에 따라 '값 손실(loss of data)'이 발생할 수 있다.

변환 2진수 10진수 값손실
int

byte
00000 ... 00001010
00001010
10
10
없음
int

byte
000000 ... 100101100
00101100
300
44
있음

반대로 작은 타입에서 큰 타입으로의 변환, 예를 들어서 byte타입(1 byte)의 값을 int타입(4 byte)으로 변환하는 경우는 저장공간의 부족으로 잘려나가는 일이 없으므로 값 손실이 발생하지 않는다. 그리고 나머지 빈공간은 0 또는 1로 채워진다.

변환 2진수 10진수 값손실
byte

int
00001010
00000 ... 00001010
10
10
없음
byte

int
11111110
111111...11111110
-2
-2
없음

4. 자동 형변환

서로 다른 타입간의 대입이나 연산을 할 때, 형변환으로 타입을 일치시키는 것이 원칙이다. 하지만, 경우에 따라 편의상의 이유로 형변환을 생략할 수 있다. 그렇다고 해서 형변환이 이루어지지 않는 것은 아니고, 컴파일러가 생략된 형변환을 자동적으로 추가한다.

float f = 1234;  //형변환의 생략. float f = (float)1234;와 같음

 

자동 형변환의 규칙

기존의 값을 최대한 보존할 수 있는 타입으로 자동 형변환한다.

표현범위가 좁은 타입에서 넓은 타입으로 형변환하는 경우에는 값 손실이 없으므로 두 타입 중에서 표현범위가 더 넓은 쪽으로 형변환된다.

byte(1 byte) -> short(2 byte) -> int(4 byte) -> long(8 byte) -> float(4 byte) -> double(8 byte)

                             char(2 byte)  ┘

1) boolean을 제외한 나머지 7개의 기본형은 서로 형변환이 가능하다.

2) 기본형과 참조형은 서로 형변환할 수 없다.

3) 서로 다른 타입의 변수간의 연산은 형변환을 하는 것이 원칙이지만, 값의 범위가 작은 타입에서 큰 타입으로의 형변환은 생략할 수 있다.

 

 

 

 

 

 

 

 

 

 

'Java > 기초' 카테고리의 다른 글

[Java] 객체지향 프로그래밍 1  (0) 2020.06.24
[Java] 배열(array)  (0) 2020.06.23
[Java] 기본형(Primitive type) - 정수형, 실수형  (0) 2020.06.21
[Java] 기본형(Primitive type) - 논리형, 문자형  (0) 2020.06.14
[Java] 진법  (0) 2020.06.14