Domanda

O per i confronti o l'inizializzazione di una nuova variabile, fa differenza quale di questi usi?

So che BigDecimal.ZERO è una funzione 1.5, quindi è una preoccupazione, ma supponendo che sto usando 1.5 è importante?

Grazie.

È stato utile?

Soluzione

BigDecimal.ZERO è una costante predefinita e pertanto non deve essere valutata da una stringa in fase di esecuzione come BigDecimal (" 0 ") . Sarà più veloce e non richiederà la creazione di un nuovo oggetto.

Se il codice deve essere eseguito su pre-1.5, è possibile utilizzare il modello Singleton (molto diffamato) per creare un oggetto equivalente a BigDecimal.ZERO . La prima volta che viene utilizzato, chiamerebbe BigDecimal (" 0 ") per creare un oggetto zero e restituire tale oggetto nelle chiamate successive. Altrimenti, se il tuo codice è in esecuzione su un sistema 1.5, il tuo oggetto singleton può semplicemente restituire BigDecimal.ZERO senza penalità di runtime.

Altri suggerimenti

L'uso di ZERO non crea un nuovo oggetto né richiede alcun analisi. Sicuramente la strada da percorrere.

Prima di parlare delle penalità di runtime, assicurati che questo pezzo di codice sia importante. Imposta la profilazione e misura il caso d'uso completo.

Tuttavia, preferisci Bigdecimal.ZERO dato che è verificato al momento della compilazione mentre puoi accidentalmente digitare new BigDecimal (" 9 ") , che il compilatore accetterà, ma che causerà bug nella tua applicazione.

Per curiosità ho controllato al costruttore per BigDecimal e non ha alcuna ottimizzazione per lo " 0 " stringa. Quindi sicuramente sì, c'è una differenza.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top