[22/50]JAVA1-8.3. 데이터 타입의 변환(casting)
Casting : 데이터 타입을 다른 데이터 타입으로 coverting 하는 것
double a = 1.1;
double b = 1;
System.out.println(b);
1.1은 double(실수)가 맞다. 그래서 double a = 1.1;을 담을 수 있다.
1 은 intger(정수)다. 하지만 일단 변수 double b에 담아보자. double b = 1; 쨘.
이렇게 해서 b를 출력하면 1.0 (double)이 나온다. double에서 intger로 가도 잃어버리는 값이 없기 때문에 잘 출력된다.
그렇다면 반대는?
// int c = 1.1;
int d = 1.1;
int e = 1.1;
1.1은 double(실수)다. 그러므로 intger에 담을 수 없다. 그래서 오류가 나기 때문에 주석처리를 하였다.
아래 변수 d와 e도 마찬가지다. d,e의 오류를 해결하기 위해서는 2가지 방법이 존재한다.
해결방법은 친절하게도 eclipse가 알려준다!
- Add cast to 'int' (int를 추가하거나)
- Change type of 'd' to 'double' (변수 d의 타입을 double로 바꿔라)
eclipse의 설명대로 행동해본다.
// int c = 1.1;
double d = 1.1;
int e = (int) 1.1;
System.out.println(e);
- 변수 d
- 1.1은 double(실수)다. 그러므로 double d에 담을 수 있다. 그래서 [int d = 1.1; -> double d = 1.1;] 로 변경한다.
올바른 데이터타입에 넣었기 때문에 잘 출력된다.
- 1.1은 double(실수)다. 그러므로 double d에 담을 수 있다. 그래서 [int d = 1.1; -> double d = 1.1;] 로 변경한다.
- 변수 e
- 1.1을 그냥 int로써 출력하고 싶을 때는 1.1 자체를 int 처리해버리는 수가 있다.
1.1; 값의 앞에 너는 (int)라고 이름표를 붙여버린다. [int e = 1.1; -> int e = (int) 1.1;]
하지만 이 방법은 데이터타입을 억지로 변경한 것이기 때문에 실수를 담을 수 없는 정수는 소수점의 값을 잃어버리고 정수의 값만 출력하게 된다.
- 1.1을 그냥 int로써 출력하고 싶을 때는 1.1 자체를 int 처리해버리는 수가 있다.
int를 자동으로 double로 변환하면 숫자에 손실이 오기때문에 꼭 명시적으로 (int)라고 지정해주어야 한다.
int e = (int) 1.1; <- 이 부분이 int 인 셈이다.
그렇다면 Number를 String으로 casting 할 수 있을까?
일단 모르니까 구글링을 하자. keyword는 "java int to string casting"이다.
String strI = Integer.toString(i);
위의 코드는 Stack overflow에서 누군가가 답변한 것을 긁어온 것이다. 이대로 입력해본다.
//1 to String
String f = Integer.toString(1);
System.out.println(f);
String로 지정된 변수 f는 = 정수.를 문자열로(1); 변환해주는 것이다. 그 결과는 1이 출력된다.
근데 결과값인 1의 데이터타입이 Number인지 String인지 어떻게 확인할 수 있을까?
.getClass() : 변수가 갖고 있는 값이 어떤 데이터 타입인지 알려준다.
System.out.println(f.getClass()); 를 입력해준다.
값은 1이 나오지만 .getclass를 통해 출력된 값이 사실은 class java.lang.String이 였다는 걸 확인할 수 있다.