新しい変数の比較または初期化のために、どちらを使用するかによって違いが生じますか?
BigDecimal.ZEROが1.5の機能であることを知っているので、それが問題になりますが、1.5を使用していると仮定すると、問題はありますか?
ありがとう。
_BigDecimal.ZERO
_は事前定義された定数であるため、BigDecimal("0")
のように実行時に文字列から評価する必要はありません。それはより速くなり、新しいオブジェクトの作成を必要としません。
コードを1.5より前で実行する必要がある場合は、(非常に悪意のある)シングルトンパターンを使用して、_BigDecimal.ZERO
_と同等のオブジェクトを作成できます。初めて使用されるときは、BigDecimal("0")
を呼び出してゼロオブジェクトを作成し、その後の呼び出しでそのオブジェクトを返します。それ以外の場合、コードが1.5システムで実行されていると、シングルトンオブジェクトは実行時のペナルティなしで_BigDecimal.ZERO
_を返すだけです。
ZEROを使用しても、新しいオブジェクトは作成されず、解析も必要ありません。間違いなく行く方法。
実行時のペナルティについて話す前に、このコードが重要であることを確認してください。プロファイリングを設定し、完全なユースケースを測定します。
それでも、コンパイル時にチェックされるため、_Bigdecimal.ZERO
_を選択してください。誤ってnew BigDecimal("9")
と入力すると、コンパイラはこれを受け入れますが、アプリケーションにバグを引き起こします。
好奇心から、BigDecimalのコンストラクターをチェックしましたが、「0」文字列の最適化は行われていません。確かにそうです、違いがあります。