为什么不能在java中将Integer转换为String?

use*_*818 92 java string integer casting

我发现了一些奇怪的异常:

java.lang.ClassCastException: java.lang.Integer 
 cannot be cast to java.lang.String
Run Code Online (Sandbox Code Playgroud)

怎么可能?每个对象都可以转换为String,不是吗?

代码是:

String myString = (String) myIntegerObject;
Run Code Online (Sandbox Code Playgroud)

谢谢.

Bhu*_*han 147

为什么这是不可能的:

因为String和Integer不在同一个Object层次结构中.

      Object
     /      \
    /        \
String     Integer
Run Code Online (Sandbox Code Playgroud)

您正在尝试的转换只有在它们处于同一层次结构时才有效,例如

      Object
     /
    /
   A
  /
 /
B
Run Code Online (Sandbox Code Playgroud)

在这种情况下,(A) objB或者(Object) objB还是(Object) objA会正常工作.

因此,正如其他人已经提到的,要将整数转换为字符串使用:

String.valueOf(integer),或Integer.toString(integer)原始的,

要么

Integer.toString() 对象.


Pet*_*hev 45

不,Integer并且String是不同的类型.要将整数转换为字符串,请使用:String.valueOf(integer),或Integer.toString(integer)原语或Integer.toString()对象.


DRi*_*FTy 20

对于int类型使用:

int myInteger = 1;
String myString = Integer.toString(myInteger);
Run Code Online (Sandbox Code Playgroud)

对于Integer类型使用:

Integer myIntegerObject = new Integer(1);
String myString = myIntegerObject.toString();
Run Code Online (Sandbox Code Playgroud)


and*_*dri 6

java.lang.Object不可以String.每个物体都可以铸造成一个,而不是一个.如果你想要一个任何对象的字符串表示,你必须调用该toString()方法; 这是一样的铸造对象到字符串.


Jon*_*han 5

你不能明确地将任何东西强制转换String为非String.你应该使用:

"" + myInt;
Run Code Online (Sandbox Code Playgroud)

要么:

Integer.toString(myInt);
Run Code Online (Sandbox Code Playgroud)

要么:

String.valueOf(myInt);
Run Code Online (Sandbox Code Playgroud)

我更喜欢第二种形式,但我认为这是个人选择.

编辑确定,这就是为什么我更喜欢第二种形式.第一种形式在编译时可以实例化StringBuffer(在Java 1.4中)或StringBuilder在1.5中; 还有一件事要收集垃圾.据我所知,编译器没有对此进行优化.第二种形式也有一个模拟,Integer.toString(myInt, radix)它允许你指定你是否想要十六进制,八进制等.如果你想在你的代码中保持一致(纯粹在美学上,我猜)第二种形式可以在更多的地方使用.

编辑2我认为你的意思是你的整数是一个int而不是一个Integer.如果它已经是Integer,只需使用toString()它就可以完成.


mil*_*ose 5

可以使用以下方法将对象转换为字符串toString()

String myString = myIntegerObject.toString();
Run Code Online (Sandbox Code Playgroud)

关于铸造没有规则。为了使投射正常工作,对象实际上必须是您要投射到的类型。