Vergleichen von Strings

Status
Nicht offen für weitere Antworten.

bummerland

Top Contributor
Strings werden nicht mit dem "==" Operator verglichen. Strings sind Objekte, die mit der Methode "equals(Object obj)" verglichen werden.
Wenn man sie mit "==" vergleicht, wird nicht der Inhalt der Objekte, sondern das Objekt selbst verglichen. Da das ja ein anderes ist, kann man sie so nicht vergleichen.


Bsp:
Java:
String a = new String("blabla");
String b = new String("blabla");

if (a.equals(b))
{
    System.out.println("equals");
}

if (a == b)
{
    System.out.println("==");
}

Ausgabe:
Code:
equals
 
B

bygones

Gast
Nachtrag:

Java:
String a = new String("blabla");
String b = new String("blabla");
String c = b;

if (a.equals(b))
{
    System.out.println("equals");
}

if (a == b)
{
    System.out.println("==");
}

if(c == b) 
{
   System.out.println("gleich");
}

Ausgabe:
Code:
equals
- da der Text der beiden String Objekte identisch ist
Code:
gleich
- da c und b auf das gleiche Objekt zeigen
 
R

Roar

Gast
Nachtrag Nr. 2:

Es gibt da allerdings noch eine Ausnahme und zwar bei folgendem Code:

Java:
String string1 = "Hello World!";
String string2 = "Hello World!";
System.out.print("\t string1 == string2 is " );
System.out.println(string1 == string2);
System.out.print("\t string1.equals(string2) is ");
System.out.println(string1.equals(string2));

Ausgabe:
Code:
string1 == string2 is true
string1.equals(string2) is true


Grund:
The Java Language Specification hat gesagt.:
The Java Language Specification explains that "Literal strings within the same class in the same package represent references to the same String object."

The Language Specification explains that "String literals - or, more generally, strings that are the values of constant expressions - are 'interned' so as to share unique instances using the method String.intern."
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben