java - 转换为原始类型或其包装类之间是否存在实际性能差异?

标签 java performance casting wrapper primitive

我继承的代码有一个相当复杂的方法,其返回类型是Object。根据输入,此方法保证返回不同类型(IntegerStringnull 等)。我在保证返回整数的情况下调用该方法。以下(显然)无法编译:

int result;
result = foo(parameters);

编译器提示从 Objectint 的类型不匹配,这也是应该的。但是,以下两行都可以编译:

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

我知道这两个调用都会执行我希望它们执行的操作。 (就此而言,转换为 shortShort 是可行的。)我的问题是:这两者之间是否存在任何实现上的实际差异 转换调用,在最佳实践性能方面,哪个比另一个更好?为了澄清,我知道原语和包装器之间的区别、它们的内存使用情况、为 null 的能力等等。我只询问有关从 Object 进行转换的信息。

据我了解,这两个调用将遵循相同的步骤:1)将Object转换为Integer(抛出ClassCastException > 如有必要),以及 2) 从该 Integer 中提取一个 int

如果存在重复的问题,我深表歉意。我搜索了它,但没有发现任何问题回答了从 Object 转换为 int 的问题。

最佳答案

实际上,使用 intInteger 之间的性能差异并不大。一种在技术上作为原语更快,并且一种具有可供您使用的有用的类相关方法。

就“强制转换”而言,如果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

相反,看看使用 intInteger 是否更有用,以及稍后对结果对象执行的操作。在 Java 中,将 int 转换为 Integer 的成本完全可以忽略不计。

关于java - 转换为原始类型或其包装类之间是否存在实际性能差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19674155/

相关文章:

eclipse - 如何在不运行 JRE 安装的情况下运行 Eclipse?

java - ANDROID:在 Java 中访问 CIFS 共享

performance - 任何 Clojure 实现都可以快速启动吗?

c - 取消引用 void 指针

java - Guice - 如何提供一个 API,支持灵活的可插拔策略实现及其自己的绑定(bind)?

java - 运行字符串中包含的代码段

performance - 使用 Haskell 在功能上将数据集相互比较一次

java - .Net 的客户端和服务器环境是否不同?

Java泛型方法在运行时转换为参数类型,这可能吗?

c - 需要帮助解决警告 : dereferencing type-punned pointer will break strict-aliasing rules