的BigDecimal:能Java编译器1优化掉乘法?
-
16-09-2019 - |
题
是否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());
其他提示
如果您的功能不确定性的,它不能被在编译时无论如何优化。
不隶属于 StackOverflow