Der Null- oder Nullwert der String wird beurteilt
Während des Entwicklungsprozesses begegne ich oft die folgenden falschen Verwendungen:
1. Fehlerverbrauch 1:
if (name == "") {// etwas tun} 2. Fehlerverbrauch 2:
if (name.equals ("")) {// etwas tun}
3. Fehlerverbrauch drei:
if (! name.equals ("")) {// etwas tun}
Erklären wir:
Die obige Fehlerverwendung 1 ist der wahrscheinlichste Fehler, den Anfänger machen und die am wenigsten wahrscheinlich entdeckt werden, da ihre Syntax selbst in Ordnung ist und der Java -Compiler beim Kompilieren keinen Fehler meldet. Diese Bedingung kann jedoch während der Laufzeit einen Fehler im Programm verursachen und wird niemals wahr sein. Mit anderen Worten, die Aussagen im IF -Block werden niemals ausgeführt.
Die oben genannte Nutzung 2 und Verwendung 3 sind geschrieben, einschließlich Fehler, die auch viele Java-Profizierungen leicht zu machen sind. Warum ist es falsch? Vielleicht wirst du verwirrt sein.
Ja, ihr Schreiben ist korrekt, aber es fehlt eine Null -Urteilsbedingung. Stellen Sie sich vor, was wird passieren, wenn Name = NULL? Die Folge ist, dass Ihr Programm eine NullPointerexception -Ausnahme auswirft, das System suspendiert wird und keine normalen Dienste mehr anbietet.
Wenn Sie zuvor ein Null -Urteil über den Namen gemacht haben, ist die Ausnahme natürlich.
Die richtige Art, es zu schreiben, sollte zuerst die Bedingung des Namens hinzufügen! = NULL, z. B.:
if (name! = null &&! name.equals ("") {// etwas tun}oder
if (! "". Equals (Name)) {// schreibe "" ", so dass egal ob der Name null ist oder nicht, es wird keinen Fehler geben. // etwas mach}
Lassen Sie uns hier ein einfaches Beispiel geben:
Testnullorempy.java
public class test {public static void main (String args []) {String value = null; testNullorEmpty (Wert); value = ""; testNullorEmpty (Wert); value = ""; testNullorEmpty (Wert); value = "Hallo ich"; testNullorEmpty (Wert); } static void testNullorEmpty (String -Wert) {if (value == null) {System.out.println ("Wert ist null"); } else if ("" .equals (value)) {System.out.println ("Wert ist leer, aber nicht null"); } else {System.out.println ("Wert ist /" " + Wert +" /""); } if (value == "") {// Underwriting von ng // Verwenden Sie dieses Schreiben nicht}}} Ausführung kompilieren:
C:/> Javac testNullorEmpty.javac:/> Java testNullorEmpty
Wert ist null. Wert ist leer, aber nicht null. Wert ist "" Wert ist "Hallo ich!"
Vergleichen Sie String -Adressen gleich
Paket com; public class a { / ** * @param args * / public static void main (String [] args) {String a = "Hallo"; Zeichenfolge b = "er"; String C = A.Substring (0, 2); System.out.println (B.Equals (c)); // True System.out.println (b == c); // false String d = new String ("Hallo"); System.out.println (D.Equals (a)); // True System.out.println (d == a); // false String e = new StringBuilder ("Hallo"). ToString (); System.out.println (E.Equals (a)); // True System.out.println (e == a); // False System.out.println (E.Equals (d)); // True System.out.println (e == D); // false String f = "hello"; System.out.println (f.equals (a)); // True System.out.println (f == a); // True System.out.println (f == "Hallo"); // True System.out.println (f == "Hell"+"O"); // True String g = b+"llo"; System.out.println (g == f); // false String h = "er"+"llo"; System.out.println (h == f); // true}}Zusammenfassen:
1. Die Zeichenfolge von New besteht darin, den Speicher neu zu sammeln, Zeichenfolgen werden nicht geteilt und mehrere Neue werden nicht geteilt.
2. Die Zeichenfolgen und statische Stringvariablen, die gespleißt oder abgefangen werden, werden nicht über Zeichenfolgefunktionen geteilt.
3.. Es gibt zwei Situationen für Zeichenfolgen, die von Pluszeichen erhalten wurden.
Ein "er"+"llo" ist eine statische Zeichenfolge, die geteilt wird
B String a = "er"; a+"llo" ist keine statische Zeichenfolge, es wird nicht geteilt