我继承了具有相当复杂方法的代码,其返回类型为Object
。 根据输入的不同,此方法表示保证返回不同的类型(Integer
、String
、null
等)。 我在它说保证返回Integer
的情况下调用该方法。 以下内容(显然)无法编译:
int result;
result = foo(parameters);
编译器抱怨从Object
到int
的类型不匹配,也应该如此。 但是,以下两行都编译:
result = (int) foo(parameters);
result = (Integer) foo(parameters);
我知道这两个电话都会做我希望他们做的事情。 (就此而言,投射到short
或Short
就可以了。 我的问题是:这两个转换调用在实现上是否存在任何实际差异,并且在最佳实践或性能方面,一个是否比另一个更好? 澄清一下,我知道原语和包装器之间的区别,它们的内存使用情况,null
的能力等等。 我只问Object
选角.
据我了解,两个调用将遵循相同的步骤:1) 将Object
投射到Integer
(如有必要,抛出ClassCastException
),以及 2) 从该Integer
中提取int
。
如果有重复的问题,我深表歉意。 我搜索了它,但我找到的问题没有回答从Object
到int
铸造的问题。
实际上,使用 int
和 Integer
之间的性能差异没有太大差异。一个作为基元在技术上更快,另一个具有您可以使用的有用的类相关方法。
就"强制转换"而言,如果foo()
在其方法代码中返回一个Integer
,则在转换为Integer
时将有0的性能损失,因为返回的Object
已经是Integer
。
如果foo()
返回一个int
则将其转换为基元会有一些成本,但没有什么明显的。
public Object fooInt() {
return 5;
}
public Object fooInteger() {
return new Integer(5);
}
Integer integerResult = (Integer)fooInteger(); //No cost
integerResult = (Integer)fooInt(); //Small casting cost
int intResult = (int)fooInteger(); //Small casting cost
intResult = (int)fooInt(); //No cost
相反,请查看使用int
与Integer
是否更有用,稍后对结果对象执行的操作。在 Java 中,将int
转换为Integer
的成本完全可以忽略不计。
基元值在性能方面是有效的,这就是它们被设为基元的原因。而在对象的情况下,它们使用更多的内存,但在使用中非常方便,并提供了一个非常有用的API。