타입 변환이란 데이터를 다른 타입으로 변환하는 것이다.
✅자동(묵시적) 타입 변환 : Promotion
✅강제(명시적) 타입 변환 : Casting
타입 변환의 종류에는 위의 두 가지가 있다. 아래에서 자세히 살펴보겠다.
int num1 = 123;
double num2 = 123.4;
num2 = num2 + num1; //246.4
//저장공간 = 123.4 + 123; //실수형+정수형=실수형
//실행 도중 작은 타입(정수형)이 큰 타입(실수형)으로 자동 타입 변환했다.
위 코드가 자동 타입 변환의 예이다.
실수형이 정수형보다 타입이 크므로 실수형으로 변경된다는 것을 알 수 있다.
byte < short < int < long < float < double
타입별 크기 순서인데 여기서 주의할 점은,
float은 표현 범위가 더 크기때문에 정수형보다 큰 타입으로 들어간다는 것이다!
int num1 = 123;
double num2 = 123.4;
int num3 = num1 + (int)num2; //123 + 246;
//변수 앞에 (int)를 붙여 double을 int형으로 강제 변환했다.
System.out.println(num3); //369
double num5 = 3.6;
double num6 = 5.5;
int result = (int)num5 + (int)num6;
// 3 5
System.out.println(result); // 8
int result2 = (int)(num5 + num6);
//(int)(9.1)
//9
위 코드는 강제 타입 변환의 예이다.
큰 타입은 작은 타입으로 자동 타입 변환을 할 수 없으므로 필요하다면 강제 타입 변환 해주어야한다.
(변수 앞에 타입을 붙여 변환할 수 있다.)
이 때, 원래 값은 보존되지 않으므로 값손실이 발생한다.
double num2를 int형으로 변환할 때 소수점 아래는 버려지고 정수만 저장되므로 값손실이 발생한다.
강제 타입 변환할 때는 값의 손실이 발생하지 않도록 주의해서 사용하자!
int intScore1 = 100;
String strScore1 = intScore1 + ""; //문자열을 만나 문자열화됨
String strScore2 = String.valueOf(intScore1); //괄호 안을 문자로!
System.out.println(intScore1); //100
System.out.println(strScore1); //"100"
System.out.println(strScore2); //"100"
정수를 문자열로 변환하는 방법이다.
데이터는 문자열을 만나면 문자열화되므로
strScore1처럼 문자열을 붙여서 변환할 수 있다.
메소드를 사용할 수도 있다.
String.valueOf();
이 메소드는 문자열로 변환하고 싶은 int, double, boolean형 등을 괄호 안에 넣으면 된다.
그럼 strScore2와 같이 문자열로 변환된다.
String strScore2 = "80";
String strScore3 = String.valueOf(90); //"90"
int intScore2 = Integer.parseInt(strScore2); //"80" -> 80
int intScore3 = Integer.parseInt(strScore3); //"90" -> 90
System.out.println(intScore2 + intScore3); //170
Integer.parseInt(); 는 괄호 안에 정수로만 구성된 문자열이 들어와야 오류가 발생하지 않는다.
예를 들어 괄호 안에 "80abc"와 같은 문자열을 넣으면 런타임 에러가 발생한다!
double dbGrade1 = 3.5;
String strGrade1 = "3.5";
double dbGrade2 = Double.parseDouble(strGrade1);
//"3.5" -> 3.5
String strGrade2 = String.valueOf(dbGrade1); //3.5
System.out.println(dbGrade2); //3.5
System.out.println(strGrade2); //"3.5"
Double.parseDouble();도 괄호 안에 실수로만 구성된 문자열을 넣어야한다.
boolean bl = true;
String strBl = String.valueOf(bl);
String strBl2 = "false";
boolean bl2 = Boolean.parseBoolean(strBl2);
System.out.println(strBl); //"true"
System.out.println(bl2); //false
Boolean.parseBoolean();은 괄호 안에 true나 false 불린 타입의 문자열만 들어올 수 있다!
(교재 : 이것이 자바다/저자 신용권)