[英]Is it better approach to declare and initialize a bigdecimal number with "new" keyword or static method?
我必須在項目中多次聲明和初始化 BigDecimal 包裝器對象。 然后通過java代碼哪個更好的方法:
BigDecimal num=new BigDecimal("123");
或者在NumberUtils
類中已經有一個靜態方法可用
public static BigInteger createBigInteger(String str) {
if (str == null) {
return null;
}
return new BigInteger(str);
}
BigDecimal num=NumberUtils.createBigInteger("123");
請告訴我,當我們比較性能(內存和速度)時,哪種方法更好。
很明顯createBigInteger
正在做更多的工作 - 它正在檢查空值,當您知道參數值無論如何都不會為空時。 不過,這只是一點點額外的工作——幾乎可以肯定在現實中是無關緊要的。
不過,如果這真的是一個性能問題,我會感到驚訝 - 您是否確定這是代碼中的瓶頸? 如果沒有,請編寫最易讀的代碼——對我來說就是構造函數調用。 然后確定您的性能要求是什么,並根據這些要求測試您的整個系統。 如果它的表現不夠好,請編寫更多測試或使用分析器來確定哪些區域導致了問題。
另一種選擇是使用BigDecimal(int)
構造函數 - 為什么要解析字符串?
BigDecimal num = new BigDecimal(123);
如果你願意,你甚至可以把它作為一個常量,這樣你就可以重用這個對象:
private static final BigDecimal DEFAULT_FOOBAR_VALUE = new BigDecimal(123);
// In a method or whatever...
BigDecimal num = DEFAULT_FOOBAR_VALUE;
除了性能之外,我認為這更清楚,因為它表明了常數的原因。
您可以使用以下常量來初始化 BigDecimal。
BigDecimal.ZERO
BigDecimal.ONE
BigDecimal.Ten
BigDecimal average = BigDecimal.ZERO;
在BigDecimal
的初始化中使用十進制值時,您只需要小心。
BigDecimal onePercentPlusABit = new BigDecimal(0.01);
不等於
BigDecimal onePercentExact = new BigDecimal("0.01");
和這個:
BigDecimal(0.01).setScale(2, RoundingMode.HALF_UP);
明顯慢於
BigDecimal("0.01");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.