【问题标题】:Double value is boxed and then immediately unboxed in Java双值被装箱,然后在 Java 中立即拆箱
【发布时间】:2015-10-01 09:38:56
【问题描述】:

如何避免在我的代码中使用所有强制转换,以免我的值被声纳装箱/拆箱?

这是我的代码:

Double value = (Double) input.get(0);

int integer = new Double(value).intValue();

Double dec = Math.abs(value - (new Double(integer ).doubleValue()));

我想尽量避免施放,但我不确定我是否可以这样装箱。

有什么想法吗?

谢谢。

【问题讨论】:

  • 为什么要在第二行新建一个Double?
  • 你为什么用Double而不是double
  • 因为我需要在 dec 之后使用 .equals()
  • 你把事情做得太难了。试试Double dec = value - Math.floor(value);
  • 如果value已经是Double,为什么还要在int integer = new Double(value).intValue();行中创建一个新的Double???

标签: java integer double sonarqube


【解决方案1】:

我不确定input.get() 返回什么类型,所以我假设第一次转换是必要的。您不需要在每一行都实例化新的 Double 对象,您只需调用其方法即可返回您需要的正确类型的值。

Double value       = (Double) input.get();
int    integerPart = value.intValue();
double decimalPart = Math.abs(value - integer.doubleValue());

看起来您只是想提取双精度的整数和小数部分,在这种情况下,这段代码更清楚地表达了意图:

Double value       = (Double) input.get();
int    integerPart = value.intValue();
double decimalPart = Math.abs(value - Math.floor(value));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-16
    • 1970-01-01
    • 1970-01-01
    • 2011-05-02
    • 1970-01-01
    • 2011-09-19
    • 2011-02-28
    相关资源
    最近更新 更多