2010-10-07 12 views
7

Wann sollte man String s als Objekte vergleichen und wann sollte man ihre equals Methode verwenden? Um sicher zu gehen, verwende ich immer equals, aber das scheint nicht sehr effizient. In welchen Situationen kann ich sicher sein, dass string1 == string2 eine sichere Anwendung ist?String Vergleich und String Interning in Java

Danke!

+3

String.equals() ist effizient. Das erste, was überprüft wird, ist ob string1 == string2. (Eigentlich Object.equals() überprüft dies.) –

+0

Aber natürlich! Wie dumm von mir. Das ist sehr offensichtlich. Und hocheffizient, wie du sagst. Niemals davon. * Schande über mich! * Danke! –

Antwort

16

Sie sollten fast immer verwenden equals. Sie können sicher sein, dass string1 == string2 wird funktionieren, wenn:

  • Sie bereits sichergestellt haben, haben Sie unterschiedliche Werte auf andere Weise bekam (zB sind Sie String-Werte aus einem Satz geholt verwenden, aber sie für einige Vergleich anderer Grund)
  • Sie wissen, dass Sie mit Kompilierung-String zu tun hat Konstanten
  • Sie haben manuell die Saiten internierten selbst

Es ist wirklich passiert nicht sehr oft, in meiner Erfahrung.

+0

Danke Jon, du hast die Dinge immer einfach und klar gestellt. –

+1

Absolut die richtige Antwort. Die Verwendung von '==', weil equals() ineffizient ist, ist ein großartiges Beispiel für vorzeitige Optimierung. – DJClayworth

+0

Und String.intern() ist langsam genug, um in den meisten Fällen für die Leistung nutzlos zu sein. – Darron

1

Von dem, was ich über Java weiß, wird string1==string2 nur wahr sein, wenn die Verweise auf diese Objekte identisch sind. Werfen Sie einen Blick auf den folgenden Fall

String string1 = new String("Bob"); 
String string2 = new String("Bob"); 

string1 == string2; // false, they are seperate objects 
string1 = string2; // asigning string1 to string2 object 
string1 == string2; // true, they both refer to the same object 
+2

Der erste Vergleich wird * nicht * falsch sein, weil sie * nicht * separate Objekte sind. String-Literale sind in Java interniert. – sepp2k

+0

Der erste Vergleich sollte in diesem Fall false zurückgeben - String string1 = new ("Bob"); String string2 = new ("Bob"); – stratwine

+0

Ich werde meine Antwort bearbeiten, um sie klarer zu definieren. Ich dachte, ich könnte auf dieses Problem mit Java stoßen. – Anthony

0

Sie nur die == zum Vergleich verwenden können, wenn Sie sicher sind, die Objekte gleich sind.

Zum Beispiel könnte dies auftreten, wenn Sie eine letzte statische String-Variable hatten. Sie können sicher sein, dass ein Vergleich zwischen demselben Objekt stattfindet.

Stick mit der equals für String-Vergleich.