繁体   English   中英

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

[英]Is performing mathematical operations on String variable a good idea?

将数值保存在对象中的String变量(也传入方法并作为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();
}

或者它只是一个开销?

它会影响性能吗?

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

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

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

  1. 所有操作都要求您从/转换为字符串表示
  2. 内存开销很大。

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

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

它比int的原始表示多18(!)倍。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM