JAVA/변수와 타입

타입 변환

yayeun 2017. 1. 21. 18:29

타입변환이란?

: 데이터 타입을 다른 데이터 타입으로 변환하는 것

  - 자동(묵시적) 타입 변환

  - 강제(명시적) 타입 변환


자동 타입변환

: 컴파일러가 알라서 변환을 해준다.

  - 작은 크기를 가지는 타입이 큰 크기를 가지는 타입에 저장될 때 발생

    메모리 크기 순서 : byte(1) < short(2) < int(4) < long(8) < float(4) < double(8)

    * char은 음수가 없어서(정수일 때만 가능) 자동 변환은 안되고 강제변환을 해주어야 한다.

    * float 는 표현할 수 있는 값의 범위가 int 보다 크다.

: 자동 타입 변환이 발생되면 변환 이전의 값과 변환 이후의 값은 동일하다.

: 정수 타입이 실수 타입으로 변환 되는 것은 무조건 자동타입변환이 된다. (but 정수값이 아닌 .0이 붙은 실수값이 된다.)


- int 에서 double 로 변환

1
2
int intValue = 20;
double doubleValue = intValue;  // 20.0
cs


- char 에서 int 로 변환

1
2
3
char charrValue = 'A';
int intValue = charrValue;  //65
 
cs



강제 타입 변환

: 강제적으로 큰 데이터를 작은 데이터 타입으로 쪼개어서 저장하는것 (캐스팅 : Casting)

  - 캐스팅 연산자() 를 사용하는데 괄호 안에 들어가는 타입은 쪼개는 단위이다.


- int 에서 byte 로 강제 변환

1
2
int intValue = 103029770;
byte byteValue = (byte) intValue;  //10
cs



- double 에서 int 로 강제 변환

1
2
double doubleValue = 3.14;
int intValue = (int) doubleValue;  //3
cs

: 실수 타입은 정수타입으로 자동변환 되지 않기 때문에 강제 타입변환을 사용한다.

  - 소수점 이하 부분은 버려지고, 정수 부분만 저장된다.


* 강제 타입 변환시 값의 손실이 발생하면 안된다.

  어떤 정수값과 실수값을 다른 타입으로 변환하고자 할 때는 변환될 타입의 최소값과 최대값을 벗어나는지 반드시 확인하고 만약 벗어난다면

  타입변환을 하지 말아야 한다.


 기본타입

 최대값 상수

 최소값 상수 

 byte

 Byte.MAX_VALUE 

 Byte.MIN_VALUE 

 short 

 Short.MAX_VALUE 

 Short. MIN_VALUE 

 int 

 Integer.MAX_VALUE 

 Integer. MIN_VALUE 

 long 

 Long.MAX_VALUE 

 Long.MIN_VALUE 

 float 

 Float.MAX_VALUE 

 Float.MIN_VALUE 

 double 

 Double.MAX_VALUE 

 Double.MIN_VALUE 


<변환시 값 확인방법 : 위의 표를 참고>

1
2
3
4
5
6
7
8
9
int i = 129;
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);
}
        
cs



1
2
3
4
5
6
7
8
int num1 = 123456780;
int num2 = 123456780;
    
float num3 = num2;  //1.23456784E8
num2 = (int) num3;  // 123456784
    
int result = num1 - num2;  //-4
 
cs

- float 타입은 23비트로 표현 할수 없기 때문에 근사치로 계산된다. 즉 정밀도 손상이 있다.

  이때는 doubledmf 을 사용하여 정밀도 손상없이 타입 변환이 가능하다.


1
2
3
4
5
6
7
8
int num1 = 123456780;
int num2 = 123456780;
    
double num3 = num2;  //1.2345678E8
num2 = (int) num3;  // 123456780
    
int result = num1 - num2;  //0
 
cs





'JAVA > 변수와 타입' 카테고리의 다른 글

연산식에서의 자동 타입 변환  (0) 2017.01.24
논리 타입  (0) 2017.01.21
실수타입  (0) 2017.01.21
정수타입  (0) 2017.01.21
데이터 타입  (0) 2017.01.21