0

在谈论 BigDecimal 时,Java 编译器是否会删除乘法 1?

我站在与此类似的地方:

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,编译器会执行乘法吗?或者它会没有指令吗?
这有点存在疑问,但我想我在某种程度上处于早期优化阶段。

4

2 回答 2

4

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

BigDecimal 可以在内部对此进行特殊处理,但显然不是。

编辑:我应该补充一点,JIT 编译器可能会发挥一些作用,但我必须做一些测试才能确定。)

我只建议您将代码更改为使用BigDecimal.valueOf(),因为 1、2 和 3 是由BigDecimal.

bd = bd.multiply(BigDecimal.valueOf(getOneTwoOrThree());
于 2009-04-24T20:00:08.540 回答
0

如果您的函数不是确定性的,则无论如何都无法在编译时对其进行优化。

于 2010-08-11T13:05:27.707 回答