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:
==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:
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:
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 ==.
Recommended Posts