2

我继承了具有相当复杂方法的代码,其返回类型为Object. 根据输入,此方法表示保证返回不同的类型(IntegerStringnull等)。如果它说保证返回一个Integer. 以下(显然)无法编译:

int result;
result = foo(parameters);

编译器抱怨Objectto的类型不匹配int,它也应该这样。但是,以下两行都可以编译:

result = (int) foo(parameters);
result = (Integer) foo(parameters);

我知道这两个电话都会做我想让他们做的事情。(就此而言,转换为shortorShort会起作用。)我的问题是:这两个转换调用之间的实现是否有任何实际差异,并且在最佳实践性能方面比另一个更好?澄清一下,我知道原语和包装器之间的区别,它们的内存使用情况,存在的能力等等。我只问关于从.nullObject

据我了解,这两个调用都将遵循相同的步骤:1)将 theObject转换为 an (如有必要,Integer抛出 a ),以及 2)从中提取 an 。ClassCastExceptionintInteger

如果那里有重复的问题,我深表歉意。我搜索了它,但没有找到任何问题回答了从Objectto转换的问题int

4

2 回答 2

3

实际上,使用int和之间的性能并没有太大差异Integer。一种在技术上作为原语更快,另一种具有可以使用的有用的类相关方法。

至于“强制转换”,如果在其方法代码中foo()返回 an Integer,则在强制转换为 an 时将有 0 性能损失Integer,因为Object返回的已经是 an Integer

如果foo()返回 an 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相反,请查看将 an与 anInteger与您稍后对结果对象所做的事情一起使用是否更有用。int在 Java 中,将 an转换为 an的成本Integer完全可以忽略不计。

于 2013-10-30T05:02:27.673 回答
0

原始值在性能方面是有效的,这就是它们被制成原始值的原因。在对象的情况下,它们使用更多内存,但使用起来非常方便,并提供了非常有用的 API。

于 2013-10-30T04:58:32.930 回答