2017-03-14 2 views
-3

j'étudie actuellement l'API java.time et je l'ai rencontré la phrase suivante sur Java LocalDateTime Documentationpourquoi ne pas utiliser l'identité sensible des opérations (==, le code de hachage d'identité ou synchronisation) sur les instances de LocalDateTime

Il s'agit d'une classe basée sur la valeur; l'utilisation d'opérations sensibles à l'identité (y compris l'égalité de référence (==), le code de hachage d'identité ou la synchronisation ) sur des instances de LocalDateTime peut avoir des résultats imprévisibles et doit être évitée. La méthode equals doit être utilisée pour les comparaisons .

Alors, je me demandais pourquoi il est recommandé de ne pas utiliser les opérations sensibles (identité, code de hachage d'identité, y compris l'égalité de référence (==), ou la synchronisation) sur les instances de LocalDateTime?

+6

Ce type de question a été posée à plusieurs reprises sur ce site, y compris dans [ces liens] (https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q= site: stackoverflow.com + java + est égal à + vs +% 3D% 3D & *). Comment ne répondent-ils pas à votre question? Votre prochaine étape devrait être de vérifier le code source pour voir exactement ce qui est dans leurs équivalents et hashCode override, si vous voulez voir comment cela s'applique à cette classe particulière. –

+0

@HovercraftFullOfEels merci pour votre commentaire. Je comprends "==" est un comparateur de référence alors que "equals()" compare si deux instances sont égales en valeur. Mais aucun des post n'a expliqué ce que "classe fondée sur la valeur" signifiait? Et ils n'expliquent pas non plus pourquoi "code de hachage d'identité, synchronisation" doit être évité avec la classe "LocalDateTime". Je me demandais donc si vous pouviez rouvrir ma question en fonction de ces raisons? Merci pour votre temps. – Thor

+0

@HovercraftFullOfEels J'ai édité la question, afin qu'elle soit plus spécifique et moins liée à "==" et "equals()" – Thor

Répondre

1

Sur le javadoc, "basé sur la valeur" a un lien vers this page, qui explique plus en détail ce que cela signifie. Le reste dit essentiellement que vous n'êtes pas censé supposer quoi que ce soit à propos de l'identité de l'instance. Par exemple, LocalDate.of(y, m, d) appelé deux fois peut renvoyer la même instance ou non. Ce blurb est probablement là avec Java 10 en tête qui va introduire value objects.