본문으로 바로가기

[Java] 변수 타입 변환

category Java 2022. 1. 23. 15:13

타입변환

  • 변수나 상수 또는 리터럴을 다른 타입으로 바꾸는 작업
byte a = 10;
int b = a;

//byte 타입 변수 z 에 저장된 10을 int 타입 변수 b에 복사해서 저장

 

자동 타입 변환

  • 자동으로 타입이 변환되는 것
  • 값의 허용 범위가 작은 타입이 허용 범위가 큰 타입으로 저장 될 때 발생
  • byte (1) < short (2) < int (4) < long(8) < float(4) < double(8)  
  • 대입 하는 것에서나 수식 안에서 서로 다른 타입일 때, 컴파일러가 자동으로 큰 타입으로 모두 변환함.
  • 같은 정수 타입에서, int와 long이 만났을 때 int는 long으로 변환된다.
  • 같은 실수 타입에서, float과 double이 만났을 때 float은 double로 변환된다.
  • 정수 타입과 실수 타입이 만났을 때, 정수 타입은 실수 타입으로 변환된다.
byte byteValue = 10;
int intValue = byteValue;
System.out.println("intValue; " + intValue);
//10


char charValure = '가';
intValue = charValue;
System.out.println("intValue; " + intValue);
// 44032 (가 의 유니코드번호)

intValue = 30;
long longValue = intValue;
System.out.println("longValue; " + longValue);
//30

longValue = 100;
float floatValue = longValue;
System.out.println("floatValue; " + floatValue);
//100.0

floatValue = 100.5F;
double doubleValue = floatValue;
System.out.println("doubleValue; " + doubleValue);
//100.5
  • byte는 char타입으로 변환 안됨 
char charValue = 'A';
int intValue= charValue;

//A의 유니코드 값인 65가 int타입에 저장됨

 

강제 타입 변환 (casting)

  • 자동 타입 변환이 안 될 때, 즉 큰 타입을 작은 타입으로 변환하고자 할 때 
  • 강제로 타입을 변환하는 것.
  • 값의 허용 범위가 큰 타입을 허용범위가 작은 타입으로 쪼개어서 저장하는 것을 말함.
  • 바꾸고자 하는 변수, 상수 또는 리터럴 앞에 ( 괄호 )를 치고 안에 변수 타입을 지정하면 된다.
  • 실수를 정수타입으로 강제변환 하면 소수점 이하 부분은 버림 되고 정수부분만 저장
int intValue = 10;
byte byteValue = (byte) intValue;
//10


donble d = 2.3456;
int i = (int) d; 
// 소수점 아래의 수는 버림 처리 됨. 즉 i 는 2


int intValue = 44032;
char charValue = (char) intValue;
System.out.println(charValue);
//가 (44032가 가의 유니코드이기 때문)

double doubleValue = 3.14
intValue = (int) doubleValue;
System.out.println(charValue);
//3

 

정수 연산에서의 자동 타입 변환

  • 정수 타입 변수가 산술 연산식에서 피 연산자로 사용되는 경우
  • byte, char, short 타입 변수는 int 타입으로 자동 변환 (long타입 없을때)
  • byte 타입 변수가 피연산자로 사용된 경우
byte x = 10;
byte y = 20;
byte result = x + y; //안됨!!! 컴파일에러
int result = x + y;
  • int 타입 변수가 피연산자로 사용된 경우
int x = 10;
int y = 20;
int result = x + y;
  • 즉 특별한 경우가 아니라면 연산에 사용하는 변수는  int 타입으로 선언하는것이 효과적
  • 피연산자중 하나라도 long 타입이면 피연산자는 long 타입으로 자동변환
byte x2 = 30;
long y2 = 40;
int result2 = x2 + y2; //안됨! 컴파일 에러 하나라도 long 이 있으면 long 으로!
long result2 = x2 + y2; // 70 출력


byte value1 = 10;
int value2 = 100;
long value3 = 1000L;
int result = value1 + value2 + value3; //(X)
long result = value1 + value2 + value3; //(o)
system.out.println(result);
  • 피연사자 중 하나라도 double 타입일 경우 다른 피 연산자도 double타입으로 자동 변환
int intValue = 10;
double doubleValue = 5.5;
double result = intVlaue + doubleValue; //result에 15.5가 저장됨

 

정수 연산의 결과를 실수로 저장할 때

  • 정수 연산의 결과는 정수이다. 
int x = 1;
int y = 2;
double result = x / y;
System.out.println(result); // (X) 정수로 계산되기 때문에 0 이 나온다.
  • 제대로 계산하는 법 
int x = 1;
int y = 2;
double result = (double) x / y;
System.out.println(result); //(o) 0.5 방법1

int x = 1;
int y = 2;
double result = x / (double) y;
System.out.println(result); //(o) 0.5 방법2

int x = 1;
int y = 2;
double result = (double) x / (double) y;
System.out.println(result); //(o) 0.5 방법3

 

플러스(+) 연산에서의 문자열 자동 타입 변환

  • 문자열과 + 연산을 하면 다른 피 연산자도 문자열로 변환되어 문자열 결합이 발생함.
int value = 1 + 2 + 3;  → int value = 3 + 3; → int value = 6;
string str = 1 + 2 + "3"; → string str = 3 + "3"; → string str = "33";
string str = 1 + "2" + 3; → stirng str = "12" + 3; → string str = "123";
string str = "1" + 2 + 3; → stirng str = "12" + 3; → string str = "123";

 

문자열을 기본 타입으로 강제 변환

  • 문자열정수 타입으로 변환 => Integer.parselnt(여기에 문자열 변수를 줌)
  • String → int 
String str = "300000";
int value = Integer.parsInt(str);
  • 문자열실수 double 타입으로 변환 => Double.parseDouble(여기에 문자열 변수를 줌)
  • String → double
String str = "12.345";
double value = Double.parseDouble(str);

 

 

Reference

혼자공부하는 자바


코딩 공부하는 블로그
블로그 이미지 서하현 님의 블로그
VISITOR 오늘 / 전체