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