Y a-t-il une différence entre BigDecimal("0") et BigDecimal.Zéro?

Que ce soit pour les comparaisons ou l'initialisation d'une nouvelle variable, Cela fait-il une différence entre celle que vous utilisez?

Je sais que BigDecimal.Zéro est une fonctionnalité 1.5, donc c'est une préoccupation, mais en supposant que j'utilise 1.5 Est-ce important?

Merci.

25
demandé sur MattGrommes 2008-11-06 21:05:08

4 réponses

BigDecimal.ZERO est une constante prédéfinie et ne doit donc pas être évaluée à partir d'une chaîne à l'exécution comme le serait BigDecimal("0"). Ce sera plus rapide et ne nécessitera pas la création d'un nouvel objet.

Si votre code doit s'exécuter sur pre-1.5, vous pouvez utiliser le modèle Singleton (très décrié) pour créer un objet équivalent à BigDecimal.ZERO. La première fois qu'il est utilisé, il appellerait BigDecimal("0") pour créer un objet zéro, et retournerait cet objet lors des appels suivants. Sinon, si votre code s'exécute sur un 1.5 Système, votre objet singleton peut simplement renvoyer BigDecimal.ZERO sans pénalité d'exécution.

35
répondu Greg Hewgill 2014-02-12 09:45:53

L'utilisation de zéro ne crée pas un nouvel objet ou ne nécessite aucune analyse. Certainement le chemin à parcourir.

13
répondu Jon Skeet 2008-11-06 18:09:17

Avant de parler de pénalités d'exécution, assurez-vous que ce morceau de code Compte. Configurez le profilage et mesurez le cas d'utilisation complet.

Néanmoins, préférez Bigdecimal.ZERO car il est vérifié au moment de la compilation alors que vous pouvez taper accidentellement new BigDecimal("9"), ce que le compilateur acceptera, mais qui causera des bogues dans votre application.

4
répondu ordnungswidrig 2011-09-25 06:49:41

Par curiosité, j'ai vérifié au constructeur pour BigDecimal et il n'a pas d'optimisations pour la chaîne "0". Donc certainement Oui, il y a une différence.

3
répondu Allain Lalonde 2008-11-06 18:18:42