java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String

casting 형 변환 오류로 대게 잘못된 형변환를 하려고 할 경우에 발생한다. 내 경우에는 hashMap에 담은 Object를 String으로 형 변환하려 (String)map.get("fruit")을 사용했을 때 해당 오류를 마주했다. 

 

hashMap에 담긴 Integer Object를 String으로 변경하고자 할 땐 String.valueOf(map.get("fruit"))을 사용해야 형변환 오류 없이 안정적으로 필요한 값을 뽑을 수 있다.

 

해당 내용에 대한 자세한 설명이 궁금해서 인터넷 및 Java API 문서를 보고 확인했더니 아래의 내용을 확인할 수 있었다.

 

(String)을 사용하려는 object가 String인 경우에만 casting이 가능하면 String이 아닐 경우 ClassCastException이 발생한다.

 

Object sumQty = new Integer(9);
String str = (String) sumQty; // ClassCastException 발생

 

String object의 경우 오류없이 casting이 정상적으로 진행되어 오류가 발생하지 않는다.

Object reallyAString = "today";
String str = (String) reallyAString;

 

String.valueOf()는 String으로 변경하려는 대상의 타입이 무엇이든지 상관없이 String형으로 변경해준다. String.valueOf()는 원시타입(primitive type), object (Integer, Boolean, char 등 해당 Object의 toString()을 사용) 둘 다 다룰 수 있습니다.

반응형