타입변환
- 변수나 상수 또는 리터럴을 다른 타입으로 바꾸는 작업
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
혼자공부하는 자바
'Java' 카테고리의 다른 글
[JAVA ] 참조 타입(참조타입과 참조변수) (0) | 2022.01.30 |
---|---|
[JAVA ] 조건문 (if문, switch문,for문, while문, do-while문, break, continue, label) (0) | 2022.01.26 |
[Java]변수와 시스템 입출력 (0) | 2022.01.23 |
[Java] 연산자, 연산자의 종류 (0) | 2022.01.23 |
[Java] 변수 타입 (0) | 2022.01.23 |