개발일지

TIL - 20241004 - 기본 데이터 타입(primitive type)과 객체 타입(Reference type)은 서로 직접적으로 캐스팅할 수 없음.

개발자 백구 블로그 2024. 10. 4. 02:09

코테를 풀고 있는데

새로 알게 된 부분이 있어서 메모를 하려고 한다...

 

 

 

369 관련에서 코테를 풀고 있었는데....

class Solution {
    public int solution(int order) {
        int answer = 0;
        String s = (String) order;

        for (int i = 0; i < s.length(); i++ ){
            char cs = s.charAt(i);
            if (cs == '3' || cs == '6' || cs == '9'){
                answer ++ ;
            }
        }
        return answer;
    }
}

 

이렇게 계산을 해주었다...

 

String s = (String) order;

 

근데 이부분에서 에러가 발생하는 것이 아닌가???

 

가물가물하지만,,, 엥? 전에는 저렇게 하면 된다고 했던거 같은데?!

하면서 햇는데 

 

 

이런 에러가 발생했던 게 아니였는가...

 

찾아보니 객체 타입을 String으로 변환할경우는 저렇게도 가능하지만

int을 String으로 변환시킬 때는 저렇게 하면 안된다고 한다...

 

Java에서는 기본 데이터 타입(primitive type = int, char, boolean, float, double, byte, short, long )과 객체 타입(Reference type = String, Integer, ArrayList )은 서로 직접적으로 캐스팅할 수 없기 때문이라고,,,,

 

코틀린 같은 경우엔 toString으로 써줘서 간단히 변환했던거 같은데 자바는 아니였던거다... 

 

 

 

무튼 그래서 int를 String으로 변환하는 다른 방법을 찾아보았다..!!

 

내가 썼던걸로 예시를 들면

// 1. String.valueOf() 메서드 사용
int order = 123;
String s = String.valueOf(order);


// 2. Integer.toString() 메서드 사용
int order = 123;
String s = Integer.toString(order);


// 3.문자열 연결
int order = 123;
String s = order + ""; // 빈 문자열과 더하기

 

이 정도의 방식들이 있다고.... 그래서 나는 2번째인 Integer.toString을 사용해주었다. 

 

 

class Solution {
    public int solution(int order) {
        int answer = 0;
        String s = Integer.toString(order);

        for (int i = 0; i < s.length(); i++ ){
            char cs = s.charAt(i);
            if (cs == '3' || cs == '6' || cs == '9'){
                answer ++ ;
            }
        }
        return answer;
    }
}

 

그랬더니! 정답을 맞힐 수 있었다 ㅎㅎㅎ

 

자바와 코틀린의 차이가 세세하게 있어서 이렇게 코테 풀면서 공부하는거 좋은 것 같다...