한바다
[JAVA]형 변환 본문
1.형 변환이란?
정수와 실수는 컴퓨터 내부에서 표현되는 방식이 전혀 다르다. 따라서 정수와 실수를 더한다고 할때 그대로 연산을
수행할 수 없고 하나의 자료형으로 통일한 후 연산을 해야 하므로 형변환(type conversion)이 이루어진다
[예시]
int m = 25; //int형 변수 m에 정수값 25을 대입
double m2 = n; //int형 변수 m의 값을 double형 변수 m2에 대입
위와 같이 각 변수의 자료형이 다를 때 자료형을 같게 바꾸는 것임.
형변환은 크게 자동형변환과 강제적형변환이 있다.형변환의 기본 원칙은 아래와 같다.
1. 바이트 크기가 작은 자료형에서 큰 자료형으로 형변환은 자동으로 이루어진다. | |||||
2.덜 정밀한 자료형에서 더 정밀한 자료형으로 형변환은 자동으로 이루어진다. |
정수 | 실수 | ||||
byte(1바이트) | short(2바이트) | int(4바이트) | long(8바이트) | float(4바이트) | double(8바이트) |
char(2바이트) |
위 표에서 왼쪽에서 오른쪽으로 형변환을 하려면 강제로 변환해야 한다.
long형이 8바이트이고 float형이 4바이트인데 자동형변환이 되는 이유는 실수가 정수보다 표현범위가 더 넓고
정밀하기 때문이다. 또한 오른쪽에서 왼쪽으로 형 변환이 이루어질 때는 자료손실이 없지만 그 반대인 경우에는
자료 손실이 발생 할 수 있다.
2.자동형변환
① 바이트 크기가 작은 자료형에서 큰 자료형으로 대입하는 경우
[예시]byte num = 30;int num2 = num; //byte형 변수 num 값을 int형 변수 num2에 대입함→ 이 경우 num의 크기는 1바이트이고 num2의 크기는 4바이트이므로 자료손실 없이 num에 들어 있는 값이 모두 num2에저장되며 남은 3바이트는 0으로 채워진다.
② 덜 정밀한 자료형에서 더 정밀한 자료형으로 대입하는 경우
[예시]int numA = 42;float numB = numA;
→ 이 경우에는 두 변수의 크기가 같은 4바이트라도 float형인 numB가 더 정밀하게 데이터를 표현할 수 있으므로
실수형인 float형으로 변환된다.
3.강제형변환
① 바이트 크기가 큰 자료형에서 작은 자료형으로 대입하는 경우
[예시]
int cNum = 18;byte dNum = (byte)cNum; //강제로 형을 바꾸려면 바꿀 형을 괄호를 써서 명시해야 함
② 더 정밀한 자료형에서 덜 정밀한 자료형으로 대입하는 경우
실수 자료형에서 정수 자료형으로 값이 대입되는 경우에도 형변환을 강제적으로 해주어야 함
[예시]
double dNum = 6.45;
int gNUm = (int)dNum; //실수 자료형 double을 정수 자료형 int로 형변환
4.메서드 호출을 통한 형변환
→ 숫자자료형
객체자료형.parse자료형(변환할값)
Integer.parseInt(변환할 String 변수);Double.pareseDouble(변환할 String 변수); Byte.pareseByte(변환할 String 변수); Float.pareFloat(변환할 String 변수); Long.pareLong(변환할 String 변수); [예시]String str1 = "456";int num1 = Integer.parseInt(str1)
String str2 = "123.45;double num2 = Double.parseDouble(str2)
숫자 자료형 → String
객체자료형.toString(변환할 숫자 변수);
Integer.toString(변환할 숫자 변수);
Byte.toString(변환할 숫자 변수);
Short.toString(변환할 숫자 변수);
Double.toString(변환할 실수 변수);
Float.toString(변환할 실수 변수);
Long.toString(변환할 숫자 변수);
[예시]
int number = 0108679;
String sti = Integer.toStirng(number);
double score = 99.5;
String ste = Double.toString(score);