[翻译]为什么在Java里不能将Integer强制转换成String
Contents
为何Integer不能转换为String
因为 String
和 Integer
不是在同一个对象阶层。
Object
/ \
/ \
String Integer
当你尝试强制转换时,仅仅会在同一个对象阶层转换。比如:
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()
,所以才造成这种认为理所当然的错觉。