对String变量执行数学运算是个好主意吗?

时间:2013-04-23 10:50:45

标签: java string bigdecimal

String变量中的数值保存在一个对象中(同时传入方法并作为String返回)以及稍后只在BigDecimal中进行转换并运行?<是一个好主意吗? / p>

在方法签名和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 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

  1. 所有操作都要求您翻译/到字符串表示
  2. 内存开销很大。
  3. 考虑这个例子。普通int占用内存中的4个字节。表示为int的{​​{1}}最多可占用72个字节:

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

    String的原始表示多18(!)倍。

答案 3 :(得分:0)

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

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