BigDecimal(“ 0”)とBigDecimal.ZEROに違いはありますか?
-
06-07-2019 - |
質問
新しい変数の比較または初期化のいずれかで、どちらを使用するかによって違いが生じますか?
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"の最適化はありません。文字列。間違いなく、違いがあります。