我对类型转换有点困惑。
正如我现在所理解的那样(或者可能误解它),类型转换只是一种改变变量数据类型的方法。例如,当我有:
String stringVar = "1";
我可以将stringVar的数据类型更改为整数:
int intVar = (int)stringVar;
正确?
但我也可以用它来实现同样的目标:
int intVar = Integer.parseInt(stringVar);
我还看过其他转换数据类型的方法。那么我应该只考虑类型转换和那些方法作为完成相同事情的多种方式,或者它们是否有所不同?
另外,我偶尔也会看到这样的事情,这是好的做法还是多余的?
String stringVar = (String)intVar.toString();
答案 0 :(得分:1)
您无法将String
投射到int
,因为只能对非常具体的String
进行转换(仅包含数字,而不是太多位)。仅当源类型可以转换为目标类型时,转换才有效。 JLS有关于哪些类型可以转换为哪些类型的严格规则。某些转化是自动完成的,而其他转换则需要明确转换。
要将String转换为整数,您必须使用Integer.parseInt(stringVar)
或Integer.valueOf(stringVar)
。
至于(String)intVar.toString()
,首先它仅在intVar
为Integer
(int
)时才有效。由于String
已经返回toString
,因此转换为String
是多余的。
答案 1 :(得分:1)
不,您无法通过投射将String
转换为int
。转换不会自动将对象从一种类型转换为另一种类型*。
使用强制转换,可以绕过编译器的类型检查。你告诉编译器"我在这里有这个对象,而且我比你更了解这是什么,所以我希望你把它当作类型X"来对待它。不会进行自动转换。
编译器不会检查对象的类型,但仍会在运行时而不是在编译时进行类型检查。如果在运行程序时类型错误,您将获得ClassCastException
。
*:当您从一个原语类型转换为另一个原型时,会有一些自动转换,但不会引用参考类型。