BackEnd/Java

[22/50]JAVA1-8.3. 데이터 타입의 변환(casting)

Sunday31 2022. 10. 20. 19:16

 

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가 알려준다!

 

ecllpse에서 오류를 수정할 수 있는 2가지 방법을 추천해준다 (똑또기)

  • 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;] 로 변경한다.
      올바른 데이터타입에 넣었기 때문에 잘 출력된다.
  • 변수 e
    • 1.1을 그냥 int로써 출력하고 싶을 때는 1.1 자체를 int 처리해버리는 수가 있다.
      1.1; 값의 앞에 너는 (int)라고 이름표를 붙여버린다. [int e = 1.1; -> int e = (int) 1.1;]
      하지만 이 방법은 데이터타입을 억지로 변경한 것이기 때문에 실수를 담을 수 없는 정수는 소수점의 값을 잃어버리고 정수의 값만 출력하게 된다.

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이 였다는 걸 확인할 수 있다.

실행 결과