Schleimige Bestätigung
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("Die Jahreszeit ist nicht Frühling.");
}
if (!season.equals(Season.SPRING)) {
System.out.println("Die Jahreszeit ist nicht Frühling.");
}
}
}
Ausführungsergebnis
Die Jahreszeit ist nicht Frühling.
Exception in thread "main" java.lang.NullPointerException
at EnumNullPointerExceptionTest.main(EnumNullPointerExceptionTest.java:13)
== bestanden und war wütend auf schleimig auf Augenhöhe (obwohl ich tatsächlich bestanden habe! =).
NullPointerException tritt nicht auf == Tsuyotsuyo: erröten: NullPointerException tritt auf equlas Yowayowa: Schweiß:
==Bearbeitungszeitmessung
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("Wie lange hat es gedauert, den Vergleich 2 Milliarden Mal zu wiederholen?" + executionTimeMs + "Millisekunden");
}
}
==Ausführungsergebnis von
Es dauerte 2 Millisekunden, um den Vergleich 2 Milliarden Mal zu wiederholen
Entspricht der Messung der Verarbeitungszeit
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("Wie lange hat es gedauert, den Vergleich 2 Milliarden Mal zu wiederholen?" + executionTimeMs + "Millisekunden");
}
}
Ausführungsergebnis von gleich
Es dauerte 4 Millisekunden, um den Vergleich 2 Milliarden Mal zu wiederholen
Es ist ein wenig, aber == ist schneller, weil es nicht konvertiert.
Es gibt keine Typkonvertierung und keine Verschwendung == Tsuyotsuyo: entspannt: Gleich, was eine Typkonvertierung erfordert und verschwenderisch ist. Schweiß:
Bestätigung kompilieren
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) {}
}
}
Ergebnis kompilieren
$ javac EnumCompileTest.java
EnumCompileTest.java:10:Error:Typen Jahreszeit und Tier können nicht verglichen werden
if (Season.SPRING == Animal.CAT) {}
^
1 Fehler
Der Vergleich verschiedener Typen == war wütend.
Zur Kompilierungszeit erfolgt eine Typprüfung == Tsuyotsuyo: entspannt: Gleich ohne Typprüfung zur Kompilierungszeit: Schweiß:
Die Sprachspezifikation sagt: 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.
Es gibt nur eine Instanz jeder Enum-Konstante Die Enum-Instanz ist eine einzelne Tonne. Sie können also mit == vergleichen.