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.
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.
L'utilisation de zéro ne crée pas un nouvel objet ou ne nécessite aucune analyse. Certainement le chemin à parcourir.
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.
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.