** 여기 있는 모든 코드의 package는 chapter2로 지정했습니다.
코드를 eclipse 등에서 실행하고 싶으면 chapter2로 package를 지정하거나 package chapter2;를 지우세요.
타입 변환
어떤 데이터 타입을 다른 데이터 타입으로 바꾸는 것
(ex. byte→int, int등)
- 자동 타입 변환(Promotion)
프로그램 실행 도중에 자동적으로 타입 변환이 일어나는 것
작은 크기를 가지는 타입이 큰 크기를 가지는 타입으로 저장할 때 발생한다.
여기서 크기는 타입이 사용하는 메모리(byte) 크기로 판단한다.
byte(1) < short(2) < int(4) < long(8) < float(4) < double(8)
이런 순서로.
타입 변환이 발생하면 변환 이전과 이후의 값은 동일하다.
마치 작은 그릇의 물을 큰 그릇의 물로 옮겨도 물의 양은 동일하듯이.
단, byte타입을 char 타입으로 변환할 수는 없다.
//PromotionExample.java
package chapter2;
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)
강제적으로 큰 데이터 타입을 작은 데이터 타입으로 쪼개 저장하는 것.
"큰 그릇의 물을 작은 그릇의 사이즈만큼만 넣고 버리는 것"
int를 byte에 넣는다면, 4byte의 int중 1byte만 쪼개 byte에 넣는 것.
//CastingExample.java
package chapter2;
public class CastingExample {
public static void main(String[] args) {
int intValue = 44032;
char charValue = (char) intValue; // int 타입인 변수 intValue를 char 타입으로 casting
System.out.println(charValue);
long longValue = 500;
intValue = (int) longValue; // long 타입인 변수 longValue를 int 타입으로 casting
// 즉, literal 44032인 intValue를 longValue의 literal인 500으로 저장 후, int로 casting한 것
System.out.println(intValue);
double doubleValue = 3.14;
intValue = (int) doubleValue;// double 타입인 변수 doubleValue를 int 타입으로 casting
// 즉, literal 500인 intValue를 doubleValue의 literal인 3.14으로 저장 후, int로 casting한 것
// int 타입은 정수이므로 소숫점은 다 버린다.
System.out.println(intValue);
}
}
- 연산식에서의 자동 타입 Casting
서로 다른 타입의 피연산자가 있을 경우
두 피연산자 중 크기가 큰 타입으로 자동 변환된 후 연산을 수행한다.
//OperationsPromotionExample.java
package chapter2;
public class OperationsPromotionExample {
public static void main(String[] args) {
byte byteValue1 = 10;
byte byteValue2 = 20;
// byte byteValue3 = byteValue1 + byteValue2; //java는 정수 연산을 int로 하므로, byte끼리는 연산 불가
int intValue1 = byteValue1 + byteValue2; // byte 연산을 위한 byte to int Promotion
System.out.println(intValue1);
char charValue1 = 'A';
char charValue2 = 1;
// char charValue3 = charValue1 + charValue2; java는 정수 연산을 int로 하므로, char끼리는 연산 불가
int intValue2 = charValue1 + charValue2; // char 연산을 위한 char to int Promotion
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 //int에선 실수 연산을 할 수 없다.
double doubleValue = intValue5 / 4.0;
System.out.println(doubleValue);
}
}
'Java > Learn_Java' 카테고리의 다른 글
4. 조건문과 반복문_활용문제 (0) | 2020.03.29 |
---|---|
3. 연산자_연습문제 (0) | 2020.03.29 |
3. 연산자 (0) | 2020.03.28 |
2. 변수와 타입 (0) | 2020.03.28 |
Intro (0) | 2020.03.28 |