簡體   English   中英

使用“new”關鍵字或靜態方法聲明和初始化大十進制數是更好的方法嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM