Der Vergleich von enum ist == und gleich ist gut [Java]

Grund

== löst keine NullPointerException aus / gleich

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ß:

== ist schlank (schnell), weil es keine Typkonvertierung gibt / gleich ist verschwenderisch (langsam), weil es eine Typkonvertierung in einen Objekttyp gibt

==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ß:

== hat eine Typprüfung zur Kompilierungszeit / equals hat keine Typprüfung

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ß:

Extra: Warum kann enum mit == verglichen werden?

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.

Referenz

Recommended Posts

Der Vergleich von enum ist == und gleich ist gut [Java]
[Java / Swift] Vergleich von Java-Schnittstelle und Swift-Protokoll
Diskriminierung von Enum in Java 7 und höher
Die Geschichte des einfachen String-Vergleichs in Java
Die Reihenfolge der Java-Methodenmodifikatoren ist festgelegt
[Java] Der verwirrende Teil von String und StringBuilder
Ich habe die Eigenschaften von Java und .NET verglichen
[Java] Vergleich von Zeichenketten und && und ||
[Java] Ist es nicht erforderlich, "Identität" bei der Implementierung der equals () -Methode zu überprüfen?
Bitte beachten Sie die Aufteilung (Aufteilung) von Java Kotlin Int und Int
Den aktuellen Status von Java organisieren und die Zukunft betrachten
Java-Sprache aus der Sicht von Kotlin und C #
[JAVA] Was ist der Unterschied zwischen Schnittstelle und Zusammenfassung? ?? ??
[Java] Über Objects.equals () und Überprüfung des String-Vergleichs (== und gleich)
Ich habe die Typen und Grundlagen von Java-Ausnahmen zusammengefasst
Äquivalenter Vergleich von Java-Wrapper-Klasse und primitivem Typ
[Java] Unterschied zwischen == und gleich
[Java] HashCode und gleich Überschreibung
Vor- und Nachteile von Java
5. Tag von Java
[Hinweis] Java Ausgabe der Summe von ungeraden und geraden Elementen
Ich habe versucht, die Grundlagen von Kotlin und Java zusammenzufassen
[Java] Vergleichsmethode für Zeichenketten und Vergleichsmethode mit regulären Ausdrücken
Was ist die LocalDateTime-Klasse? [Java-Anfänger] -Datum und Zeitklasse-
Befehl zum Überprüfen der Anzahl und des Status von Java-Threads
Java-Anfänger fassten das Verhalten von Array und ArrayList kurz zusammen
Empfehlung der Set-Operation durch Java (und Verständnis von Equals und HashCode)
[Java] Beachten Sie, dass der Fall, in dem gleich ist, falsch ist, aber == ist.
[Java] com.sun.glass.WindowEvent wird importiert und das Fenster wird nicht geschlossen
Java: Das Problem ist schneller, Stream oder Loop
[Java] Ich habe über die Vorzüge und Verwendungen von "Schnittstelle" nachgedacht.
[Java] Geschwindigkeitsvergleich der Zeichenfolgenkombination
[Java] Löschen Sie die Elemente von List
Vergleich der WEB-Anwendungsentwicklung mit Rails und Java Servlet + JSP
[Java] Verschiedene Zusammenfassungen an die Leiter von Klassen und Mitgliedern
Warum die Breite des Vollbildelements 100% und die Höhe 100vh beträgt
'% 02d' Was ist der% von% 2?
Über Biocontainer fastqc und Java
[Java] Ordnen Sie die Daten des vergangenen Montags und Sonntags der Reihe nach an
Android - Ist die Reihenfolge der seriellen und parallelen Verarbeitung von AsyncTask garantiert? ??
[Java Edition] Geschichte der Serialisierung
Informationen zu den Methoden equals () und hashcode ()
Was für ein StringUtil ist gut?
Wo ist die Zeitzone von Javas LocalDateTime.now ()?
Das Designkonzept der Datums- und Uhrzeit-API von Java ist interessant
Java-Vergleich mit der compareTo () -Methode
[Java-Anfänger] == Operator und Gleiche Methode
Dies und das von JDK
Die in /lib/calendars.properties von Java jre festgelegte Millisekunde ist UTC
Lesen Sie die ersten 4 Bytes der Java-Klassendatei und geben Sie CAFEBABE aus
Verstehe gleich und hashCode in Java
Vom jungen Java (3 Jahre) bis zu Node.js (4 Jahre). Und der Eindruck, nach Java zurückzukehren
Ich habe versucht, die Methoden von Java String und StringBuilder zusammenzufassen
Vergleich der Verarbeitungszeit basierend auf awk, Shell-Befehl und Java
[Java] Was ist der Unterschied zwischen Form, Entität und dto? [Bohne]
[Java] Korrekter Vergleich des String-Typs
Ist die von Ihnen verwendete Version von Elasticsearch mit Java 11 kompatibel?
Der Ursprung von Java-Lambda-Ausdrücken
Untersuchungsmethode, wenn die CPU des Servers, auf dem Java ausgeführt wird, schwer ist