La comparaison d'énumération est ==, et equals est bonne [Java]

Raison

== ne lève pas NullPointerException / equals fait

Confirmation visqueuse


public class EnumNullPointerExceptionTest {

	enum Season { SPRING, SUMMER, AUTUMN, WINTER; }

	public static void main(String[] args) {
		Season season = null;
		if (season != Season.SPRING) {
			System.out.println("La saison n'est pas le printemps.");
		}

		if (!season.equals(Season.SPRING)) {
			System.out.println("La saison n'est pas le printemps.");
		}
	}
}

Résultat d'exécution


La saison n'est pas le printemps.
Exception in thread "main" java.lang.NullPointerException
	at EnumNullPointerExceptionTest.main(EnumNullPointerExceptionTest.java:13)

== a réussi et était en colère contre visqueux à égalité (même si j'ai réussi! =)

NullPointerException ne se produit pas == Tsuyotsuyo: blush: NullPointerException se produit equlas Yowayowa: sueur:

== est maigre (rapide) car il n'y a pas de conversion de type / égal est inutile (lent) car il y a conversion de type en type d'objet

==Mesure du temps de traitement


public class EnumSpeedTest1 {

	enum Season { SPRING, SUMMER, AUTUMN, WINTER; }

	public static void main(String[] args) {
		Season season = Season.SPRING;

		long startTimeMs = System.currentTimeMillis();
		for (int i = 0; i < 2000000000; i++) {
			if (season == Season.SPRING) {}
		}
		long executionTimeMs = System.currentTimeMillis() - startTimeMs;
		System.out.println("Combien de temps a-t-il fallu pour répéter la comparaison 2 milliards de fois?" + executionTimeMs + "Milli secondes");
	}
}

==Résultat d'exécution de


Il a fallu 2 millisecondes pour répéter la comparaison 2 milliards de fois

Égale la mesure du temps de traitement


public class EnumSpeedTest2 {

	enum Season { SPRING, SUMMER, AUTUMN, WINTER; }

	public static void main(String[] args) {
		Season season = Season.SPRING;

		long startTimeMs = System.currentTimeMillis();
		for (int i = 0; i < 2000000000; i++) {
			if (season.equals(Season.SPRING)) {}
		}
		long executionTimeMs = System.currentTimeMillis() - startTimeMs;
		System.out.println("Combien de temps a-t-il fallu pour répéter la comparaison 2 milliards de fois?" + executionTimeMs + "Milli secondes");
	}
}

Résultat d'exécution égal à


Il a fallu 4 millisecondes pour répéter la comparaison 2 milliards de fois

C'est un peu, mais == est plus rapide car il ne convertit pas.

Il n'y a pas de conversion de type et il n'y a pas de déchets == Tsuyotsuyo: relaxé: Égale à qui nécessite une conversion de type et est un gaspillage. Sueur:

== a une vérification de type au moment de la compilation / equals n'a pas de vérification de type

Compiler la confirmation


public class EnumCompileTest {

	enum Season { SPRING, SUMMER, AUTUMN, WINTER; }
	enum Color { RED, GREEN, BLUE; }
	enum Animal { DOG, CAT; }

	public static void main(String[] args) {
		if (Season.SPRING.equals(Color.RED)) {}
		if (Season.SPRING == Animal.CAT) {}
	}
}

Compiler le résultat


$ javac EnumCompileTest.java
EnumCompileTest.java:10:Erreur:Les types Saison et Animal ne peuvent pas être comparés
		if (Season.SPRING == Animal.CAT) {}
		                  ^
1 erreur

La comparaison de différents types == était en colère.

Il y a une vérification de type au moment de la compilation == Tsuyotsuyo: relaxé: Égale sans vérification de type au moment de la compilation:

Extra: Pourquoi peut-on comparer enum avec ==?

La spécification de langue dit: 8.9.1. Enum Constants

Because there is only one instance of each enum constant, it is permitted to use the == operator in place of the equals method when comparing two object references if it is known that at least one of them refers to an enum constant.

Il n'y a qu'une seule instance de chaque constante d'énumération L'instance enum est une seule tonne. Vous pouvez donc comparer avec ==.

référence

Recommended Posts

La comparaison d'énumération est ==, et equals est bonne [Java]
[Java / Swift] Comparaison de l'interface Java et du protocole Swift
Discrimination d'énum dans Java 7 et supérieur
L'histoire de la comparaison de chaînes de bas niveau en Java
L'ordre des modificateurs de méthode Java est fixe
[Java] La partie déroutante de String et StringBuilder
J'ai comparé les caractéristiques de Java et .NET
[Java] Comparaison des chaînes de caractères et && et ||
[Java] Est-il inutile de vérifier "l'identité" dans l'implémentation de la méthode equals ()?
Veuillez noter la division (division) de java kotlin Int et Int
Organiser l'état actuel de Java et envisager l'avenir
Langage Java du point de vue de Kotlin et C #
[JAVA] Quelle est la différence entre interface et abstract? ?? ??
[Java] À propos de Objects.equals () et examen de la comparaison de chaînes (== et égal à)
J'ai résumé les types et les bases des exceptions Java
Comparaison équivalente de la classe wrapper Java et du type primitif
[Java] Différence entre == et égal
[Java] HashCode et remplacement égal
Avantages et inconvénients de Java
5ème jour de Java
[Note] Sortie Java de la somme des éléments pairs et impairs
J'ai essayé de résumer les bases de kotlin et java
[Java] Méthode de comparaison de chaînes de caractères et méthode de comparaison utilisant des expressions régulières
Qu'est-ce que la classe LocalDateTime? [Java débutant] -Date et classe d'heure-
Commande pour vérifier le nombre et l'état des threads Java
Les débutants en Java ont brièvement résumé le comportement de Array et ArrayList
Recommandation de l'opération set par Java (et compréhension de equals et hashCode)
[Java] Notez le cas où égal est faux mais == est ture.
[Java] com.sun.glass.WindowEvent est importé et la fenêtre ne se ferme pas
Java: dont le problème est plus rapide, en flux ou en boucle
[Java] J'ai réfléchi aux mérites et aux utilisations de "interface"
[Java] Comparaison de vitesse de combinaison de chaînes
[Java] Supprimer les éléments de la liste
Comparaison du développement d'applications WEB avec Rails et Java Servlet + JSP
[Java] Divers résumés joints aux chefs de classe et aux membres
Pourquoi la largeur de l'élément plein écran est de 100% et la hauteur de 100vh
'% 02d' Quel est le% de% 2?
À propos de Biocontainers fastqc et Java
[Java] Obtenez les dates des derniers lundi et dimanche dans l'ordre
Android - L'ordre du traitement série et du traitement parallèle d'AsyncTask est-il garanti? ??
[Édition Java] Histoire de la sérialisation
À propos des méthodes equals () et hashcode ()
Quel genre de StringUtil est bon
Où est le fuseau horaire de Java LocalDateTime.now ()?
Le concept de conception de l'API de date et d'heure de Java est intéressant
Comparaison Java à l'aide de la méthode compareTo ()
[Java débutant] == opérateur et méthode equals
Ceci et cela de JDK
La milliseconde définie dans /lib/calendars.properties de Java jre est UTC
Lire les 4 premiers octets du fichier de classe Java et générer CAFEBABE
Comprendre equals et hashCode en Java
De Java naissant (3 ans) à Node.js (4 ans). Et l'impression de retourner à Java
J'ai essayé de résumer les méthodes de Java String et StringBuilder
Comparaison du temps de traitement basé sur awk, la commande shell et Java
[Java] Quelle est la différence entre form, entity et dto? [Haricot]
[Java] Comparaison correcte du type String
La version d'Elasticsearch que vous utilisez est-elle compatible avec Java 11?
L'origine des expressions Java lambda
Méthode d'enquête lorsque le processeur du serveur exécutant java est lourd