[英]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
值中保存小值。 字符串将是两字节字符十进制表示。
从两个角度来看这是一个坏主意:
考虑这个例子。 普通的int
在内存中占用4个字节。 表示为String
的int
最多可占用72个字节:
它比int
的原始表示多18(!)倍。
这样做有很多问题。 首先,存在创建和销毁额外对象的开销,至少一个用于转换为/从String转换。 根据这种情况发生的次数,它可能很重要。 其次,每次从String转换为数字并返回时,您都有可能解析问题等。 最后,您规避Java在类型转换等方面提供的任何内置检查和平衡。
我个人认为,您应尽可能减少转换,并将数据存储在最具体的对象/原语中。 我认为这使得代码更容易阅读,更易于维护,并且在出现错误时更容易进行故障排除。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.