我继承了代码相当复杂的代码,其返回类型为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)提取来自int
的{{1}}。
如果那里有重复的问题,我道歉。我搜索了它,但毫无疑问,我发现了从Integer
转换为Object
的问题。
答案 0 :(得分:2)
实际上,使用int
和Integer
之间的效果差异不大。一个在技术上更快作为基元,并且有一个有用的类相关方法,你可以使用。
就“投射”而言,如果foo()
在其方法代码中返回Integer
,那么在投放到Integer
时会有0个性能损失,因为Object
} return已经是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
的成本完全可以忽略不计。
答案 1 :(得分:0)
原始值在性能方面是有效的,这就是为什么它们是原始的。虽然在对象的情况下,它们使用更多内存但使用起来非常方便,并提供了非常有用的API。