Punkte, die bei Java beachtet werden müssen, sind gleich

Teil 1 Nullprüfung


public static void main(String[] args) {

	String str1 = null;
	String str2 = "test";

	System.out.println(str1.equals(str2));//Führen Sie 1 aus
	System.out.println(str2.equals(str1));//Ausführung 2
}

Ausführung 1 löst eine java.lang.NullPointerException aus. Die Ursache für die Ausnahme ist, dass ich null in str1 eingefügt und die Methode vom null-Objekt aufgerufen habe. Das Aufrufen einer Methode von einem Nicht-Null-Str2 löst keine Ausnahme mehr aus und gibt false zurück.

Die Art und Weise, die Ausführung 2 zu schreiben, hat den Vorteil, dass eine Ausnahme nicht auftritt, selbst wenn str1 null ist, aber es gibt den Nachteil, dass es schwierig ist, Codefehler zu bemerken, wenn sie implementiert werden, ohne anzunehmen, dass null als abnormales System eingegeben wird. Ich denke.

Wenn Ihnen die Nullprüfung bekannt ist, ist es möglicherweise sicherer, sie mit Ausnahmebehandlung abzufangen.

public static void main(String[] args) {

	String str1 = null;
	String str2 = "test2";

	try {
		System.out.println(str1.equals(str2));
	}catch(NullPointerException ex) {
		System.out.println("Ausnahme fangen");
	}
}

Teil 2 Konstanter Pool


public static void main(String[] args) {

	String str1 = "test1";
	String str2 = "test1";

	System.out.println(str1.equals(str2));//Ergebnis 1
	System.out.println(str1 == str2);     //Ergebnis 2
}

Ergebnis 1 ist natürlich wahr, aber was ist mit Ergebnis 2? Zusammenfassend ist auch Ergebnis 2 wahr.

Dies liegt daran, dass es einen Mechanismus gibt, der als konstanter Pool bezeichnet wird. Zeichenliterale erscheinen häufig im Programm. Wenn Sie jedoch jedes Mal eine Instanz von String erstellen, wird viel Speicherplatz benötigt.

Wenn dasselbe Zeichenfolgenliteral erneut angezeigt wird, wird der Verweis auf die Zeichenfolgeninstanz im Speicherbereich für die Konstante "wiederverwendet". Dies ist ein Mechanismus, der als konstanter Pool bezeichnet wird.

Dieser konstante Pool ist nur gültig, wenn Zeichenfolgenliterale verwendet werden. Wenn Sie explizit schreiben, um eine neue Instanz mit dem neuen Operator zu erstellen, wird jedes Mal eine Instanz erstellt, und jede Variable hat eine andere Referenz.

public static void main(String[] args) {

    String str1 = new String("test");
    String str2 = "test";

    System.out.println(str1.equals(str2));//true
    System.out.println(str1 == str2);     //false
}

Sie werden es in einem tatsächlichen Programm nicht sehen, aber seien Sie vorsichtig, da es ein häufiger Auslöser in Java Silver ist.

Teil 3 Urteil ohne Berücksichtigung der Groß- und Kleinschreibung

Sie können die equalsIgnoreCase-Methode verwenden, um die Äquivalenz unabhängig vom Fall zu bestimmen. Ich denke jedoch, dass die Häufigkeit des Auftretens erheblich niedriger ist als die von Gleichen.


public static void main(String[] args) {

    String str1 = "abc";
    String str2 = "ABC";

    System.out.println(str1.equals(str2));          //false
    System.out.println(str1.equalsIgnoreCase(str2));//true
}

das ist alles

Recommended Posts

Punkte, die bei Java beachtet werden müssen, sind gleich
Dinge, auf die Sie beim Erstellen eines Frameworks achten sollten
Dinge, auf die Sie bei der Verwendung von Kmeans in Deeplearning4j achten sollten
Achten Sie auf eingebettete Variablen in S2Dao
[Java] Hinweise zur Typinferenz in Java 10
Ich habe versucht herauszufinden, was sich in Java 9 geändert hat
[Durchsuchen] Achten Sie auf ransackable_scopes!
Dinge, die Sie beim Schreiben von Code in Java beachten sollten
Anfänger spielen Janken-Spiele in Java
Multithreaded passend zur [Java] Vorlage
[Für Anfänger] Führen Sie Selenium auf Java aus
Wie man JAVA in 7 Tagen lernt
Protokollausgabe in Datei in Java
Verstehe gleich und hashCode in Java
Wie verwende ich Klassen in Java?
So benennen Sie Variablen in Java
Versuchen Sie, Yuma in Java zu implementieren
Einstellungen für das SSL-Debugging in Java
Dinge, die in bedingten Ausdrücken zu beachten sind
So verketten Sie Zeichenfolgen mit Java
[Für Anfänger] Mindestbeispiel zum Aktualisieren von RecyclerView mit DiffUtils in Java
[Anmerkung] Java: Ist es notwendig, Gleichheit für die Beurteilung der Gleichheit zu überschreiben?
Beachten Sie, dass Neulinge während der Java-Entwicklung lesbaren Code schreiben müssen
So implementieren Sie die Datumsberechnung in Java
So implementieren Sie den Kalman-Filter mit Java
Mehrsprachige Unterstützung für Java Verwendung des Gebietsschemas
Versuchen Sie, Project Euler in Java zu lösen
Einfach, Slack Bot mit Java zu machen
Java-Referenz zum Verständnis in der Abbildung
Einführung in Java zum ersten Mal # 2
[Java] Fassen Sie zusammen, wie Sie mit der Methode equals vergleichen können
Erste Schritte für tiefes Lernen in Java
Versuchen Sie, n-ary Addition in Java zu implementieren
Wichtige Punkte für die Einführung von gRPC in Java
Über das Verfahren, damit Java funktioniert
So führen Sie eine Basiskonvertierung in Java durch
Verschiedene Dinge wie Bitflags in Java
Ändern Sie die Liste <Optional <T >> in Java in Optional <Liste <T >>
Konvertieren Sie SVG-Dateien in Java in PNG-Dateien
So erzwingen Sie Codierungskonventionen in Java
Einbetten von Janus Graph in Java
So erhalten Sie das Datum mit Java
Fügen Sie Word-Dokumenten in Java Fußnoten hinzu
[Java Bronze] 5 Probleme zu beachten
[Java] [Für Anfänger] So fügen Sie Elemente direkt in ein zweidimensionales Array ein
Beispiel zum Entpacken einer gz-Datei in Java
Memo für die Migration von Java nach Kotlin
[Für Anfänger] So debuggen Sie mit Eclipse
Fügen Sie dem Cookie in Java das SameSite-Attribut hinzu
Für meinen Sohn, der angefangen hat, Java mit "Einführung in Java" in einer Hand zu studieren
[Java] So testen Sie, ob es in JUnit null ist
Dinge, die Sie beim Schreiben von Java beachten sollten
ChatWork4j für die Verwendung der ChatWork-API in Java
Techniken zum Lesen von Java-Quellcode in Eclipse
So zeigen Sie eine Webseite in Java an
Versuchen Sie, ein Bulletin Board in Java zu erstellen
Lösung für NetBeans 8.2 funktioniert nicht in Java 9-Umgebung
So erhalten Sie eine Klasse von Element in Java
Es scheint kein anderes zu geben - wenn in Java