Frage

So habe ich das Buch „Java for Dummies“ 4th Edition gekauft, und ich muss sagen, es ist wahrscheinlich die besten 30 Dollar, die ich je auf einem Buch verbracht haben. Ich bin nicht neu Codierung, bin eigentlich recht ordentlich an es, wenn ich das so sagen.

Allerdings habe ich über eine Code-Zeile kommen, die mir einen Hauch hat verwirrt:

public void setName(String n)
{
     if(!n.equals(""))
     {
          name = n;
     }
}

Meine Frage in der dritten Zeile kommt, das, wenn ein Teil ... Ich weiß, wie wenn Schleifen funktionieren (dh: if (dies == die) {Sachen tun}) (n.equals ( "")!), aber ich habe das nicht gesehen! n.equals ( „“) einrichten, bevor. Kann jemand bitte es mir erklären?

PS: Gerade in einer Vermutung zu werfen. Ist es das gleiche wie:

public void setName(String n)
{
     if(n != "")
     {
          name = n
     }
}

Ich denke, es ist nur ein Weg, um sicherzustellen, dass, wenn der Benutzer keinen Namen in nicht geben (dh myAccount.setName = „“;.) Es keinen Fehler zurück treten und läuft wie normal, aber ich wasn ‚t sicher.

Vielen Dank im Voraus für die Hilfe!

EDIT: änderte mein "myAccount.name = "";" auf "myAccount.setName = "";.", sorry über die Verwirrung

DANKE: Geht zum Asaph, schätzen die Antwort! Gleichfalls Lucas Aardvark, antwortete er auch, aber Asaph beantwortete meine Überprüfung Kommentar in seiner eigenen Antwort zuerst, Dank an alle!

War es hilfreich?

Lösung

if(!n.equals(""))
{
     name = n;
}

bedeutet, wenn n kein leerer String ist, dessen Wert auf Namen zuweisen.

In Java hat jedes Objekt eine equals (Object o) Verfahren mit einem anderen Objekt auf Gleichheit zu testen. Der Operator == wird normalerweise verwendet, Primitiven zu vergleichen. Es kann auch vergleichen Objekte für „Gleichheit“ verwendet werden. dh. Die beiden Objekte sind die gleiche Instanz in der Tat. Das ist praktisch für unveränderliche Typen wie Strings und alle Object Wrapper für die primitiven Typen wie Integer und Long.

Andere Tipps

In Java sind Strings unveränderlich, aber nicht interniert, so  if ( „“ == n) kann oder auch nicht für eine andere Zeichenfolge wahr sein für die "" .equals (n) wahr ist.

Nur du mehr zu verwirren, diese schlechten Code ist, wird es eine Nullpointer bekommen wenn mit null als Argument aufgerufen. Es sollte als "" .equals geschrieben (n)

Die Methode equals () Inhalt der beiden Strings vergleicht. Der == und! = Betreiber Ihnen sagen, ob die beiden String-Objekte das gleiche Objekt sind oder nicht. Zwei verschiedene Strings mit dem gleichen Inhalt und damit equals () zueinander sind, können immer noch! Sein = zueinander. Obwohl Strings nicht wandelbar sind, hilft es, den Unterschied zu verstehen, durch die Vorstellung, dass Strings wandelbar sind, und dann gleich () bedeutet „sind zur Zeit die gleiche“ und == bedeutet „wird immer die gleiche sein.“

Die sichere Regel ist, verwenden Gleichen immer (), wenn Sie sicher sind, dass beide Saiten interniert . Zitiert:

  

Daraus folgt, dass für zwei beliebige Strings s   und t, s.intern () == t.intern () ist   true, wenn und nur wenn s.equals (t)   wahr.

     

Alle Zeichenketten und String-Wert   Konstante Ausdrücke werden interniert.

Bedenken Sie:

String a="";
String b="";

a und b sind String-Objekte, die jeweils ihre eigenen Speicherzuweisung und somit eine eindeutige Adresse. a und b sind an verschiedenen Adressen. Wenn Sie den Booleschen Ausdruck Code

a == b

Sie die Adressen der Objekte zu vergleichen, deren Inhalte nicht. So vergleichen Sie die Inhalte müssen Sie das String-Objekt equals () -Methode.

Ein Objekt hat eine Stelle im Speicher, die für jedes Objekt einzigartig ist - keine zwei verschiedenen Objekte können die gleiche Speicheradresse haben - und seinen Inhalt oder Wert. Der Operator == vergleicht die Adressen der Objekte; wenn Sie ein == Code b Sie gefragt werden, wenn a und b aliased Namen für das gleiche Objekt sind - tun a und b auf die gleiche physikalische Position beziehen. a.equals (b) fragt, ob die beiden Objekte, wo immer sie auch sein mag, den gleichen Wert haben.

Dies ist kompliziert etwas von Compiler „Internierung“, wo der Compiler bei der Kompilierung kann feststellen, dass zwei Konstanten den gleichen Wert haben und das gleiche Objekt wieder verwenden, aber dies wird für Werte nicht wahr sein zur Laufzeit erstellt.

das Verfahren equals() einen boolean Wert zurück, die besagt, dass das Objekt in den Anruf ‚gleich‘ das Objekt übergeben wird machen. Dies ‚gleich zu‘ Methode kann in Klassen überschrieben werden, um ihren eigenen Test zu machen. Im Fall von String, ist der Test, ob der Wert des ursprünglichen String ist die gleiche wie der Wert der String-Darstellung des Objekts in weitergegeben werden.

Wie ein boolean zurückgibt, können Sie den Wert mit einem ! negieren, so ist der Test ‚ist die Methode Argument nicht leer?‘ Ja? weisen Sie dann auf unsere name variabel.

== wird immer prüfen, ob das Objekt auf der linken Seite ist das gleiche wie das Objekt auf der rechten Seite, wie es Referenzen vergleicht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top