[Java] Notez le cas où égal est faux mais == est ture.

Quand j'étudiais la relation d'équivalence, Java equals est sorti, alors notez

Je pense que vous savez bien quand cela devient. C'est le moment où ce sont des instances différentes et ont la même valeur.

vice versa

Je ne pense pas que le cas du devenir soit très familier.

Cette fois, nous vérifierons la question.

environnement: Java1.8 Eclipse Neon.1

Source du problème

python


	@org.junit.Test
	public void test() {
		boolean b1 = 1 == 1.0;
		
		Integer i2 = 1;
		boolean b2 = i2==1.0;        //true
		boolean b3 = i2.equals(1.0); //false

		System.out.println(b2);
		System.out.println(b3);
		
		
	}

Commentaire

Double # valueOf est appelé à auto boxing 1.0 de type double à type Double.

auto-boxing


    public static Double valueOf(double d) {
        return new Double(d);
    }

Ce sera faux car il s'agira d'une comparaison utilisant des égaux entre 1.0 converti en type Double et 1 de type Integer.

Integer.equals()


    public boolean equals(Object obj) {
        if (obj instanceof Integer) {
            return value == ((Integer)obj).intValue();
        }
        return false;
    }

Soyez prudent avec la boxe automatique.

En ce qui concerne la boxe automatique, Java Puzzle a un problème similaire.

https://www.youtube.com/watch?v=V1vQf4qyMXg&t=11m19s

auto boxing can give you what we call the surprise left jab

by Joshua Bloch

Recommended Posts

[Java] Notez le cas où égal est faux mais == est ture.
Où est le fuseau horaire de Java LocalDateTime.now ()?
La comparaison d'énumération est ==, et equals est bonne [Java]
5ème jour de Java
[Note] Java: est-il nécessaire de remplacer les égaux pour le jugement d'égalité?
Mes réflexions sur la méthode d'égalité (Java)
[rails] Le cas où le serveur a cessé de fonctionner
Quelle est la meilleure lecture de fichier (Java)
Quelle est la méthode principale en Java?
L'API de sécurité Java EE est là!
[Java] Où est la classe d'implémentation de l'annotation qui existe dans BeanValidation?
[Java] Est-il inutile de vérifier "l'identité" dans l'implémentation de la méthode equals ()?