1

将数值保存在String对象中的变量中(也传递方法并以字符串形式返回),然后只对其进行转换BigDecimal和操作,这是一个好主意吗?

在方法签名和 pojo 中使用的意图是操作可以在实现者double喜欢的任何其他类型中执行

例如

public String operate(String value1, String value2){
    BigDecimal val1 = new BigDecimal(value1);
    BigDecimal val2 = new BigDecimal(value2);
    return val1.multiply(val2).toString();
}

或者它只是一个开销?

会不会影响性能?

4

4 回答 4

2

从一种格式转换为另一种格式总是开销。以格式存储它,以便您可以对其执行所有操作

于 2013-04-23T10:52:40.700 回答
1

不知道为什么这是个好主意。“ Stringly Typed ”并不是一件好事。是的,BigDecimal 保存了一个更紧凑的数字,作为字节数组,并且还进行了优化以在一个值中保存小值long。字符串将是两字节字符十进制表示。

于 2013-04-23T10:55:09.930 回答
1

从两个角度来看,这是一个坏主意:

  1. 所有操作都需要您从/到字符串表示形式进行转换
  2. 内存开销是巨大的。

考虑这个例子。一个普通int的内存占用4个字节。int表示为 a最多可String占用 72 个字节:

  • 16 字节——对象开销,
  • 4 个字节——缓存的哈希码
  • 8 个字节——对 char 数组的引用
  • 24 + 2 * 10 字节——字符数组本身(最多 10 位)
  • 最多 8 个字节用于填充

它是原始表示形式的 18 (!) 倍int

于 2013-04-23T11:03:38.763 回答
0

这样做有很多问题。首先,有创建和销毁额外对象的开销,至少一个永远转换为/从字符串。根据这种情况发生的次数,它可能很重要。其次,每次从字符串转换为数字并返回时,都存在解析问题等风险。最后,您绕过 Java 提供的关于类型转换等的任何内置检查和平衡。

我个人的意见是,您应该尽可能减少转换,并尽可能将数据存储在最具体的对象/基元中。我认为这使代码更易于阅读,更易于维护,并且在出现错误时更易于排除故障。

于 2013-04-23T10:55:25.153 回答