[JAVA] 타입변환

2020. 5. 25. 14:07·Computer Science/Programming Language

타입변환

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

- 자동(묵시적)타입변환 & 강제(명시적) 타입변환

 

자동타입변환(Promotion)

- 프로그램 실행 도중에 자동적으로 타입 변환이 일어나는 것

- 작은 크기 타입이 큰 크기 타입에 저장될 때 발생 (크기 = 메모리 크기)

 

byte(1) < short(2) < int(4) < long(8) < float(4) < double(8)

 

 float이 int와 long보다 큰 이유 : 표현할 수 있는 값의 범위가 더 큼

 

- 자동타입 변환 발생 -> 변환 이전 값 = 변환 이후 값

 

int intValue =200;
double doubleValue = intValue;	// 200.0 으로 저장
char charValue = 'A';
int intValue = charValue; 	// 65로 저장됨

 


public class PromotionExample {

	public static void main(String[] args) {
	
		byte byteValue=10;
		int intValue = byteValue;	//int <- byte
		System.out.println(intValue); 	//	10
		
		char charValue ='가';
		intValue = charValue;		//int <- char
		System.out.println(intValue);	//	44032
		
		intValue =500;
		long longValue = intValue; 	//long <- int
		System.out.println(longValue);		//	500
		
		intValue = 200;
		double doubleValue = intValue;	//double <- int
		System.out.println(intValue);	//	200
	}

}

 

강제 타입변환(Casting)

- 큰 데이터 타입을 작은 데이터 타입으로 강제적으로 쪼개서 저장

- 작은 크기 타입 = (작은 크기 타입) 큰 크기 타입

 

(1) 강제 타입 변환 시 원래 값이 보존되는 경우

ex.

int intValue = 10;
byte byteValue = (byte) intValue;

 

(2) 강제 타입 변환 시 원래 값이 보존되지 않는 경우

ex.

int intValue = 103029770;
byte byteValue = (byte)intValue;	

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);		// 500
		
		double doubleValue = 3.14;
		intValue = (int)doubleValue;
		System.out.println(intValue);		// 3
		
	}

}

 

변환시 데이터 손실이 발생하지 않도록 하기 위해 -> 보존될수 있는지 검사해야함

기본타입

최대값 상수

최소값 상수

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

 

 

ex.

if((i<Byte.MIN_VALUE) ||(i>Byte.MAX_VALUE)) {
	System.out.println("byte타입 변환 불가");
}
else {
	byte b = (byte) i;
	System.out.println(b);
}

 

 

 

int -> float  vs int -> double

float

부호 (1비트)

지수(8비트)

가수(23비트)

double

부호 (1비트)

지수(11비트)

가수(52비트)

 

int의 크기는 32비트이므로 double의 가수 52비트보다 작기때문에 어떤 int값이어도 데이터 손실 없이 double타입으로 변환 가능

 

 

연산식에서의 자동타입변환

int intValue = 10;
double doubleValue = 5.5;
double result = intValue + doubleValue; 	//intValue : double로 자동변환
System.out.println(result)	//	15.5

 

저작자표시 비영리 변경금지 (새창열림)

'Computer Science > Programming Language' 카테고리의 다른 글

[JAVA] 연산자- 이항연산자  (0) 2020.05.28
[JAVA] 연산자- 단항연산자  (0) 2020.05.26
[JAVA] 데이터 타입  (0) 2020.05.21
[JAVA] 변수  (0) 2020.05.21
[JAVA] 명령프롬프트에서 java 실행  (0) 2020.05.21
'Computer Science/Programming Language' 카테고리의 다른 글
  • [JAVA] 연산자- 이항연산자
  • [JAVA] 연산자- 단항연산자
  • [JAVA] 데이터 타입
  • [JAVA] 변수
BS Kwak
BS Kwak
  • BS Kwak
    Slow but steady wins the race
    BS Kwak
  • 전체
    오늘
    어제
    • 카테고리 (161)
      • Project (2)
      • Next.js (3)
      • HTML+CSS+JS (17)
      • Computer Science (139)
        • Programming Language (52)
        • 자료구조와 알고리즘 (75)
        • Digital circuit (3)
        • 기타 error (9)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    오블완
    cmd error
    해시
    leetcode
    mysql error
    런타임 에러
    티스토리챌린지
    c++error
    LNK2001
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
BS Kwak
[JAVA] 타입변환
상단으로

티스토리툴바