BigDecimal(“ 0”)とBigDecimal.ZEROに違いはありますか?

StackOverflow https://stackoverflow.com/questions/269669

  •  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"の最適化はありません。文字列。間違いなく、違いがあります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top