개발일지
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;
}
}
그랬더니! 정답을 맞힐 수 있었다 ㅎㅎㅎ
자바와 코틀린의 차이가 세세하게 있어서 이렇게 코테 풀면서 공부하는거 좋은 것 같다...