【问题标题】:Performance of Object Typecasting对象类型转换的性能
【发布时间】:2012-01-10 12:47:12
【问题描述】:

对象类型转换在性能方面的成本有多大?
我应该尽量避免类型转换吗?

【问题讨论】:

    标签: java performance casting


    【解决方案1】:

    它足够便宜,属于过早优化的范畴。不要浪费时间去思考或提出问题,除非你已经分析了你的应用程序并确定这是一个问题,最重要的是:不要为了避免它而妥协你的设计。

    【讨论】:

      【解决方案2】:

      取决于你所说的类型转换。有一种“向上转型”,它不会花费你任何东西,而有一种“向下转型”,它会让你付出很多。第二个的答案也以“取决于”开始。通常我会避免在我的代码中向下转换,因为根据我的经验,如果它在你的代码中被过度使用,这意味着设计很糟糕。另一方面,这并不一定意味着根本不应该使用它。

      【讨论】:

      • +1:虽然在性能方面可能会花费一点,但好的设计是避免它的更重要原因。 ;)
      【解决方案3】:

      JavaWorld: The cost of casting

      Casting 用于在 types -- 在引用类型之间 特别是对于铸件的类型 我们感兴趣的操作 这里。

      Upcast 操作(也称为 扩大Java中的转换 语言规范)转换 对祖先的子类引用 类参考。这个铸件 操作通常是自动的,因为 它总是安全的,可以 由编译器直接实现。

      Downcast 操作(也称为 缩小 Java 中的转换范围 语言规范)转换 祖先类对子类的引用 参考。本次铸造作业 产生执行开销,因为 Java 要求检查演员表 运行时以确保它是有效的。 如果引用的对象不是 任一目标类型的实例 该类型的强制转换或子类, 不允许尝试的演员表 并且必须抛出一个 java.lang.ClassCastException。

      【讨论】:

        【解决方案4】:

        类型转换会产生成本,因为必须检查运行时类型信息以确保转换有效。与其他一切相比,我怀疑这会很重要,但您可以尝试衡量一下​​。

        更一般地说,类型转换是(恕我直言)设计中出现问题的标志。当然,有时您无法避免它(例如,使用遗留集合),但我肯定会看看是否可以删除它。

        【讨论】:

          【解决方案5】:

          不,它不应该对性能产生重大影响。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2010-11-13
            • 2014-11-13
            • 1970-01-01
            • 2023-03-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-11-25
            相关资源
            最近更新 更多