(Beschränkt auf Java 7 oder höher) Ich möchte, dass Sie Objekte in Objects.equals vergleichen

Vergleich vor Java 7

Einige Personen (interne Mitarbeiter) schreiben beim Vergleichen von Objekten immer noch den folgenden Code. Um NullPointerException zu vermeiden, schreiben Sie zuerst Konstanten.

if ("hoge".equals(hoge)) {
	//Erhalten Sie niemals eine NullPointerException
}

Ich überprüfe zuerst null und vergleiche dann.

if (hoge != null && hoge.equals("hoge")) {
	//Wenn hoge NULL ist, wird der nachfolgende String.gleich wird nicht ausgeführt
}

Vergleich nach Java 7

Wenn Sie Java 7 oder höher verwenden, verwenden Sie bitte `java.util.Objects.equals (Objekt a, Objekt b)`. In diesem Fall wird ein Vergleich unter Berücksichtigung von Null durchgeführt.

if (Objects.equals(hoge, "hoge")) {
	//wird bearbeitet
}

Auch wenn der Zeiger (Adresse im Speicher) des Objekts unterschiedlich ist Seien Sie versichert, dass die gespeicherten Werte miteinander verglichen werden.

String hoge1 = "hoge";
String hoge2 = new String("hoge");

System.out.println(hoge1 == hoge2);               // false
System.out.println(hoge1.equals(hoge2));          // true
System.out.println(Objects.equals(hoge1, hoge2)); // true

Bonus

Beim Schreiben dieses Artikels habe ich java.util.Objects erneut besucht. Ich wusste das nicht! Ich werde so etwas schreiben.

toString

Eine Methode zum Konvertieren in einen String-Typ. Wenn das Konvertierungsziel null ist, wird es in die Zeichenfolge null konvertiert.

Object obj = null;
String str = Objects.toString(obj);
System.out.println(Objects.equals(str, "null")); // true
System.out.println(Objects.equals(str, null));   // false 

Es ist sehr schön, Nullen vermeiden zu können, aber ich denke, es gibt Situationen, in denen es schwierig ist, in die Zeichenfolge Null zu konvertieren. Wenn Sie in einem solchen Fall im zweiten Argument eine Zeichenfolge festlegen, können Sie den zurückgegebenen Wert ändern, wenn er null ist.

Object obj = null;
String str = Objects.toString(obj, "Es ist NULL!");
System.out.println(str); //Ausgabeergebnis: NULL!

Ich kannte die toString-Methode, wusste aber nicht, dass ich das zweite Argument setzen konnte.

isNull/nonNull

isNull ist eine Methode, die true zurückgibt, wenn das Argument NULL ist. nonNull ist eine Methode, die false zurückgibt, wenn das Argument NULL ist.

Object obj = null;
System.out.println(Objects.isNull(obj));  // true
System.out.println(Objects.nonNull(obj)); // false

obj == nullSieht stylischer aus. (Ich habe den Unterschied im Verhalten zwischen `obj == null``` und` obj! = Null``` nicht gesehen ...)

requireNonNull

Eine Methode, um zu überprüfen, ob das Ziel NULL ist. Wenn es NULL ist, tritt eine NullPointerException auf.

Object obj2 = Objects.requireNonNull(obj1);

Wenn Sie versuchen, eine NULL-Prüfung ohne diese Methode durchzuführen,

if (obj1 == null) {
	throw new NullPointerException();
} else {
	Object obj2 = Objects.requireNonNull(obj1);
}

Wird sein. Ich denke, es ist eine einfache und bequeme Methode.

Verweise

Objects (Java Platform SE 7) Die alte Schreibweise ist alt! ?? java.util.Objects ist zu bequem

Recommended Posts

(Beschränkt auf Java 7 oder höher) Ich möchte, dass Sie Objekte in Objects.equals vergleichen
Ich möchte eine E-Mail in Java senden.
rsync4j - Ich möchte rsync in Java berühren.
Ich möchte so etwas wie "cls" in Java machen
Ich möchte ES2015 auch in Java verwenden! → (´ ・ ω ・ `)
Wenn Sie Annotation in Java 8 dynamisch ersetzen möchten
Selbst in Java möchte ich true mit == 1 && a == 2 && a == 3 ausgeben
Ich möchte die if-else-Anweisung für bedingte Verzweigungen in Java vereinfachen
[CQ Engine] Ich möchte Sammlungen wie Stream oder .Net LINQ auch in Java 7 verarbeiten.
[Java] Ich möchte mit dem Schlüssel im Objekt eindeutig arbeiten
[Java] Ich möchte überprüfen, ob die Elemente in der Liste null oder leer sind. [Collection Utils]
So debuggen Sie Java 9 oder höher remote
Ich möchte Java-Updates insgesamt stoppen
Ich möchte @Autowired in Servlet verwenden
Selbst in Java möchte ich true mit == 1 && a == 2 && a == 3 ausgeben (PowerMockito Edition)
Ich möchte die IP-Adresse erhalten, wenn ich mit Java eine Verbindung zu Wi-Fi herstelle
Ich möchte für jedes Array mit Lambda-Ausdruck in Java
[Java Spring MVC] Ich möchte DI in meiner eigenen Klasse verwenden
R von Java ausführen Ich möchte rJava ausführen
Sogar in Java möchte ich true mit == 1 && a == 2 && a == 3 ausgeben (Javassist zweite Abkochung)
Wenn Sie InputStream in JDBI3 binden möchten
Ich möchte Java8 für jeden mit Index verwenden
Ich möchte APP_HOME an Logback in Gradle übergeben
Ein Hinweis, wenn Sie Tupel in Java möchten
Ich wollte (a == 1 && a == 2 && a == 3) in Java wahr machen
Ich möchte, dass Sie Scala vorerst als besseres Java verwenden
Ich habe versucht, neunundneunzig in Java auszugeben
Ich möchte irgendwann sogar in Kotlin sein
Ich möchte schnell von Java nach SQLite schreiben
Ich habe versucht, Alexa-Fähigkeiten mit Java zu erstellen
Selbst in Java möchte ich true mit == 1 && a == 2 && a == 3 (Black Magic) ausgeben.
Ich möchte den Wert in Ruby erhalten
Sie müssen den Host auch beim Remote-Debugging mit Java 9 oder höher angeben
[Android Studio] Ich möchte Einschränkungen für die in EditText [Java] registrierten Werte festlegen.
Ich möchte ein Objekt im CSV-Format mit mehrzeiligem Header und Filter in Java zurückgeben
# 1_JAVA Ich möchte die Indexnummer durch Angabe eines Zeichens in der Zeichenfolge erhalten
Code, der verwendet werden soll, wenn Sie Json nur mit Standardbibliotheken in Java verarbeiten möchten
Ich möchte Combine auch in UIKit verwenden.
Ich möchte die praktischen Funktionen von Clojure in Kotlin nutzen
Ich möchte eine TraceId in das Protokoll einbetten
[Gradle] Generieren Sie Javadoc einschließlich JavaScript in Java 1.8.0_121 oder höher
Ich habe versucht, die Firebase-Push-Benachrichtigung in Java zu implementieren
Ich möchte auch in Laradock Fischschalen verwenden! !!
# 2 [Anmerkung] Ich habe versucht, neunundneunzig mit Java zu berechnen.
Ich möchte ein kleines Symbol in Rails verwenden
Ich habe versucht, eine Clova-Fähigkeit in Java zu erstellen
Ich habe versucht, eine Anmeldefunktion mit Java zu erstellen
Ich möchte eine Funktion in der Rails Console definieren
Ich möchte Bildschirmübergänge mit Kotlin und Java machen!
So konvertieren Sie A in a und a in A mit logischem Produkt und Summe in Java
Ich möchte Schlangenfälle mit Tabellendefinitionen stoppen
Ich möchte in RSpec auf einen GoogleMap-Pin klicken
Ich habe versucht, die Methode der gegenseitigen Teilung von Eugrid in Java zu implementieren
~ Ich habe jetzt versucht, funktionale Programmierung mit Java zu lernen ~
Ich habe versucht herauszufinden, was sich in Java 9 geändert hat