web-dev-qa-db-ja.com

BigDecimal( "0")とBigDecimal.ZEROの間に違いはありますか?

新しい変数の比較または初期化のために、どちらを使用するかによって違いが生じますか?

BigDecimal.ZEROが1.5の機能であることを知っているので、それが問題になりますが、1.5を使用していると仮定すると、問題はありますか?

ありがとう。

26
MattGrommes

_BigDecimal.ZERO_は事前定義された定数であるため、BigDecimal("0")のように実行時に文字列から評価する必要はありません。それはより速くなり、新しいオブジェクトの作成を必要としません。

コードを1.5より前で実行する必要がある場合は、(非常に悪意のある)シングルトンパターンを使用して、_BigDecimal.ZERO_と同等のオブジェクトを作成できます。初めて使用されるときは、BigDecimal("0")を呼び出してゼロオブジェクトを作成し、その後の呼び出しでそのオブジェクトを返します。それ以外の場合、コードが1.5システムで実行されていると、シングルトンオブジェクトは実行時のペナルティなしで_BigDecimal.ZERO_を返すだけです。

36
Greg Hewgill

ZEROを使用しても、新しいオブジェクトは作成されず、解析も必要ありません。間違いなく行く方法。

14
Jon Skeet

実行時のペナルティについて話す前に、このコードが重要であることを確認してください。プロファイリングを設定し、完全なユースケースを測定します。

それでも、コンパイル時にチェックされるため、_Bigdecimal.ZERO_を選択してください。誤ってnew BigDecimal("9")と入力すると、コンパイラはこれを受け入れますが、アプリケーションにバグを引き起こします。

4
ordnungswidrig

好奇心から、BigDecimalのコンストラクターをチェックしましたが、「0」文字列の最適化は行われていません。確かにそうです、違いがあります。

3
Allain Lalonde