1
30
好吧,编译后的代码可能在第二种情况下包含了两次强制转换-所以 理论上 它做了两次同样的工作。但是,很有可能一个智能的JIT会发现您正在对相同的值执行相同的强制转换,因此它可以缓存结果。但它 是 必须至少做一次工作——毕竟,它需要决定是让演员组成功,还是抛出一个异常。 和以往一样,如果您关心代码的性能,您应该测试和分析代码——但是我个人还是会使用第一个表单,因为它看起来更可读。 |
2
8
对。必须根据实际的铸造机制对每个铸件进行检查,因此多次铸造将比一次铸造成本高。然而,这是编译器可能优化掉的类型。它可以清楚地看到,输入自上一次强制转换以来没有改变其类型,并且应该能够避免多次强制转换,或者至少避免一些强制转换检查。 无论如何,如果你真的 那个 担心效率,我想知道Java是否是你应该使用的语言。 就我个人而言,我会说使用第一个。它不仅可读性更强,而且更易于以后更改类型。您只需要在一个地方更改它,而不必每次调用该变量上的函数。 |
3
2
我同意乔恩的评论,一次做一次,但是在我所记得的“铸造昂贵”的一般问题上值得注意的是:Java 1.4用Java 5明显地改进了这一点,使得铸造非常便宜。除非你在写一个游戏引擎,否则我不知道这是不是该再烦恼了。我更担心的是自动装箱/拆箱和隐藏对象创建。 |
4
1
符合 this article ,存在与铸造相关的成本。 请注意,这篇文章是从1999年开始的,由读者决定信息是否仍然可信! |
5
-4
在第一种情况下:
它是在编译时确定的,所以在运行时不需要花费任何成本。 在第二种情况下:
它是在运行时确定的,因为编译器不知道。JVM必须检查它是否可以转换为
|