JAVA chapter 02. 변수와 타입. 2.3 타입 변환
JAVA/CONCEPT 2017. 11. 16. 15:24 |JAVA chapter 02. 변수와 타입.
2.3 타입 변환
2.3.1 자동 타입 변환
// 표현할 수 있는 값의 범위가 float가 더 크므로 int와 long보다 더 큰 타입으로 표시
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | package sec03.exam01_promotion; public class PromotionExample { public static void main(String[] args) { byte byteValue = 10; int intValue = byteValue; // int(4) <- byte(1) System.out.println(intValue); char charValue = '가'; intValue = charValue; // int(4) <- char(2) System.out.println("가의 유니코드=" + intValue); intValue = 500; long longValue = intValue; // long(8) <- int(4) System.out.println(longValue); intValue = 200; double doubleValue = intValue; // double(8) <- int(4) System.out.println(doubleValue); } } | cs |
2.3.2 강제 타입 변환 (Casting)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | package sec03.exam02_casting; 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); } } | cs |
// 강제 타입 변환에서 주의할 점은 사용자로 부터 입력받은 값을 변활할 때 값의 손실이 발생하면 안된다는 것이다.
// 강제 타입 변환을 하기 전에 우선 안전하게 값이 보존될 수 있는지 검사하는 것이 좋다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | package sec03.exam02_casting; public class CheckValueBeforeCasting { public static void main(String[] args) { int i = 128; if( (i<Byte.MIN_VALUE) || (i>Byte.MAX_VALUE) ) { // if( (i<-128)||(i>127)과 동일 ) System.out.println("byte 타입으로 변환할 수 없습니다."); System.out.println("값을 다시 확인해 주세요"); } else { byte b = (byte) i; System.out.println(b); } } } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 | package sec03.exam03_accuracy; public class FromIntToFloat { public static void main(String[] args) { int num1 = 123456780; int num2 = 123456780; float num3 = num2; // 1234567890은 23비트로 표현할 수 없기 때문에 근사치로 변환된다. 즉, 정밀도 손실이 발생한다 num2 = (int) num3; int result = num1 - num2; System.out.println(result); } } | cs |
2.3.3 연산식에서의 자동 타입 변환
// 자바는 정수 연산일 경우 int 타입을 기본으로 한다.
// 그 이유는 피연산자를 4byte 단위로 저장하기 때문에 크기가 4byte보다 작은 타입(byte, char, short)은 4byte인 int 타입으로 변환된 후 연산이 수행된다.
// 피연산자 중 하나가 long 타입이라면 다른 피연산자도 long 타입으로 자동 타입 변환되고, 연산의 결과는 long 타입이 된다.
// 피연산자 중에 실수 리터럴이나, double 타입이 있다면 다른 피연산자도 double 타입으로 자동 타입 변환되어 연산하므로 결과는 double 타입으로 산출된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | package sec03.exam04_operation; 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); } } | cs |