我今天遇到了一个意外的错误,涉及 Java 1.4 中的三元条件运算符。
以下代码没有产生预期的结果:
product.setValue((finalAmount == 0) ? StringUtils.EMPTY : ConversionUtil.bigDecimalToString(value) + " " + code);
product.setNumber((finalAmount == 0) ? StringUtils.EMPTY : ConversionUtil.formatLongToAmountString(new Long(finalAmount)));
当finalAmount == 0
,Value
设置为 BlahBlahStuff,而不是""
。但是,数字设置正确。
但是,这有效:
if (finalAmount == 0) {
product.setValue(StringUtils.EMPTY);
product.setNumber(StringUtils.EMPTY);
}
else {
product.setValue(ConversionUtil.bigDecimalToString(value) + " " + code);
product.setNumber(ConversionUtil.formatLongToAmountString(new Long(finalAmount)));
}
为什么测试会在一条线上工作而不是另一条线?
finalAmount
是一个原始的long
,并且是这个方法的本地。
免责声明- 我知道:
- 在 2013 年使用 Java 1.4 是异端邪说。可悲的是,我对此并不做主。
- 工作解决方案尽管不那么紧凑,但实际上效率更高,因为测试不会重复两次。我只是想了解为什么第一个不起作用。