是否Java编译器1,在谈论的BigDecimal当除去乘法?

我站在类似于此:

BigDecimal bd = getBigDecimal();//get arbitrary bigDecimal, could be anyone.

bd = bd.multiply(new BigDecimal(getOneTwoOrThree());

当getOneTwoOrThree方法声明为:

/* 
 * Always returns Integers 1, 2 or 3.
 */
 Integer getOneTwoOrThree(){
     //some code
 }

所以,基本上

如果getOneTwoOrThree()返回1,将编译器执行乘法运算?还是会NOP指令?点击 这是一个有点怀疑存在的,但我想我是在一定程度上月初 - 优化

有帮助吗?

解决方案

没有。 BigDecimal是一个库类(它不是即使在java.lang),因此编译器将其视为任何其他类

BigDecimal可能的特殊情况下,该内部,但显然没有。

编辑:我要补充,这是可能的,JIT编译器可以工作一些魔术,但我会做一些测试,以确保)

我只能建议你改变你的代码使用的 BigDecimal.valueOf() 时,因为1,2,和3是一些其通过BigDecimal内部缓存的特殊情况。

bd = bd.multiply(BigDecimal.valueOf(getOneTwoOrThree());

其他提示

如果您的功能不确定性的,它不能被在编译时无论如何优化。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top