타입 변환
- 데이터 타입을 다른 데이터 타입으로 변환하는 것을 말함
예) byte 타입을 int 타입으로 변환 또는 int 타입을 byte으로 변환 - 자동(묵시적) 타입 변환, 강제(명시적) 타입 변환 두 종류가 있음
자동 타입 변환
- 프로그램 실행 도중에 자동적으로 타입 변환이 일어나는 것
- 작은 크기를 가지는 타입이 큰 크기를 가지는 타입에 저장될 때 발생
큰 크기 타입 = 작은 크기 타입
자동 타입 변환
- byte(1) < short(2) < int(4) < long(8) < float(4) < double(8)
- 정수 타입이 실수 타입으로 변환하는 것은 무조건 자동 타입 변환이 된다
int intValue = 200;
double doubleValue = intValue; //200.0
> 실수 타입으로 변환된 이후의 값은 정수값이 아닌, .0이 붙은 실수값이 된다
char charValue = 'A';
int intValue = charValue; //65가 저장
> char 타입의 경우 int 타입으로 자동 변환되며 유니코드 값이 int 타입에 저장됨
package thisisjava.chap02.num03;
public class PromotionExample {
public static void main(String[] args) {
byte byteValue = 10;
int intValue = byteValue; // int <- byte
System.out.println(intValue);
char charValue = '가';
intValue = charValue; // int <- char
System.out.println("가의 유니코드=" + intValue);
intValue = 500;
long longValue = intValue; // long <- int
System.out.println(longValue);
intValue = 200;
double doubleValue = intValue; // double <- int
System.out.println(doubleValue);
}
}
강제 타입 변환 (Casting)
- 큰 크기의 타입은 작은 크기의 타입으로 자동 타입 변환 할 수 없음
예) 4byte인 int 타입을 1byte인 byte 타입에 담을 수 없다 - 캐스팅 연산자 () 를 사용하는데, 괄호 안에 들어가는 타입은 쪼개는 단위
작은 크기 타입 = (작은 크기 타입) 큰 크기 타입
int = (int) long
강제 타입 변환
double doubleValue = 3.14;
int intValue = (int) doubleValue; // 정수 부분인 3만 저장됨
> 실수 타입(float, double)은 정수 타입(byte, short, int, long)으로 자동 변환되지 않음
> 소수점 이하 부분은 버려지고, 정수 부분만 저장
package thisisjava.chap02.num03;
public class CastingExample {
public static void main(String[] args) {
int intValue = 44032;
char charValue = (char) intValue;
System.out.println(charValue);
long longValue = 500;
intValue = (int) longValue;
System.out.println(intValue);
double doubleValue = 3.14;
intValue = (int) doubleValue;
System.out.println(intValue);
}
}
package thisisjava.chap03;
public class CheckValueBeforeCasting {
public static void main(String[] args) {
int i = 128;
if ((i < Byte.MIN_VALUE) || (i > Byte.MAX_VALUE)) { //*
System.out.println("byte 타입으로 변환할 수 없습니다");
System.out.println("값을 다시 확인해 주세요");
} else {
byte b = (byte) i;
System.out.println(b);
}
}
}
> 변환으로 인한 데이터 손실이 발생되지 않도록 함
> (i<-128) || (i>127)과 동일
> i = 128 // 128 > 127
package thisisjava.chap02.num03;
public class FromIntToFloat {
public static void main(String[] args) {
int num1 = 123456780;
int num2 = 123456780;
float num3 = num2;
num2 = (int) num3;
int result = num1 - num2;
System.out.println(result);
}
}
> 정수 타입을 실수 타입으로 변환할 때 정밀도 손실을 피한다
> float ㄴㄴ
package thisisjava.chap02.num03;
public class FromIntToDouble {
public static void main(String[] args) {
int num1 = 123456780;
int num2 = 123456780;
double num3 = num2;
num2 = (int) num3;
int result = num1 - num2;
System.out.println(result);
}
}
> double 정밀도 ㅇㅋ
연산식에서의 자동 타입 변환
- 연산은 기본적으로 같은 타입의 피연산자간에만 수행됨
서로 다른 타입의 피연산자가 있을 경우 두 피연산자 중 크기가 큰 타입으로 자동 변환된 후 연산 수행 - 자바는 정수 연산일 경우 int 타입을 기본으로 함
int intValue = 10;
double doubleValue = 5.5;
double result = intValue + doubleValue; // result에 15.5가 저장
> intValue가 double값으로 변환
int intValue = 10;
double doubleValue = 5.5;
int result = intValue + (int)doubleValue; // result에 15 저장
> int 타입으로 꼭 연산을 해야 한다면 double 타입을 int 타입으로 강제 변환하고 덧셈 연산 수행!
package thisisjava.chap02.num03;
public class OperationsPromotionExample {
public static void main(String[] args) {
byte byteValue1 = 10;
byte byteValue2 = 20;
// byte byteValue3 = byteValue1 + byteValue2; //컴파일 에러
int intValue1 = byteValue1 + byteValue2;
System.out.println(intValue1);
char charValue1 = 'A';
char charValue2 = 1;
// char charValue3 = charValue1 + charValue2; //컴파일 에러
int intValue2 = charValue1 + charValue2;
System.out.println("유니코드=" + intValue2);
System.out.println("출력문자=" + (char)intValue2);
int intValue3 = 10;
int intValue4 = intValue3 / 4;
System.out.println(intValue4);
int intValue5 = 10;
// int intValue6 = 10/4.0; //컴파일에러
double doubleValue = intValue5 / 4.0;
System.out.println(doubleValue);
}
}
> 연산식에서 자동 타입 변환
'이것이 자바다' 공부 기록
300x250
'Language > JAVA' 카테고리의 다른 글
[JAVA] 연산자와 연산식 2 // 이항연산자 삼항연산자 (0) | 2021.09.13 |
---|---|
[JAVA] 연산자와 연산식 1 // 단항연산자 이항연산자 (0) | 2021.09.12 |
[JAVA] 데이터 타입 // 정수 실수 문자 논리 (0) | 2021.09.10 |
[JAVA] 변수 (0) | 2021.09.09 |
[JAVA] 자바! 프로그래밍 언어 / 주석 / 실행문 / 세미콜론 (0) | 2021.09.08 |