[翻译]为什么在Java里不能将Integer强制转换成String

为何Integer不能转换为String

原文

因为 StringInteger 不是在同一个对象阶层。

1
2
3
4
Object
/ \
/ \
String Integer

当你尝试强制转换时,仅仅会在同一个对象阶层转换。比如:

1
2
3
4
5
6
7
Object
/
/
A
/
/
B

在这种情况,(A)objB 或者 (Object)objB 或者 (Object)objA 可以进行转换。

正如其他人已经提到,将integer转换成String可以使用以下方法:

基本类型的整型时使用:String.valueOf(integer)或者Integer.toString(integer) 来转换成String
Integer对象型时使用:Integer.toString()转换成String


写代码过程中,居然遇到这种错误(在使用Spring 来操作 Redis 经常出现,但百思不得其姐。和同事讨论时才发现,原来Redis在底层永远是保存String的,即使在写代码的时候是写成 set(String, Object)。这时,如果get这个缓存出来,而且想要的是整型时,就会报java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String错误。),出来工作差不多2年了,这种错误的本质原因,直到今天才明白。实在是太惭愧了。很可能是被所有对象可以以字符串的形式表示而导致的,以为所有的对象在使用 (String)obj时,会使用 obj.toString(),所以才造成这种认为理所当然的错觉。