我继承的代码有一个相当复杂的方法,其返回类型是Object
。根据输入,此方法保证返回不同类型(Integer
、String
、null
等)。我在保证返回整数的情况下调用该方法。以下(显然)无法编译:
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
的成本完全可以忽略不计。
关于java - 转换为原始类型或其包装类之间是否存在实际性能差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19674155/