# Prüfen ob 2 String gleich sind... eigendlich simple?



## Sway (18. August 2004)

Hi,

ich bin hier grad am verzweifeln. 
Und zwar:  Ich übergebe einen String beim Starten *"meep"* und habe in einer  IF-Abfrage die beiden String gegenüber liegen. Beide Strings sind (meiner meinung nach gleich) aber die IF-Abfrage sieht das anders.



```
public static void main(String args[])
{
   String a  = args[0];
   String b = "meep";

	 	if( a != b )
	  	{
	  		System.out.println("Falsch!");
	 	}else{
 	 		System.out.println("Richtig!");
	 	}
}
```


p.s. Ich habe mal den das ausgeben lassen, was ich übergebe und da kommt  exakt meine Eingabe wieder...  (ich übergebe _meep_ und bekomme _meep_)


----------



## Snape (18. August 2004)

*Typischer und häufiger Fehler*



> _Original geschrieben von Sway _
> *Hi,
> ich bin hier grad am verzweifeln.
> Und zwar:  Ich übergebe einen String beim Starten "meep" und habe in einer  IF-Abfrage die beiden String gegenüber liegen. Beide Strings sind (meiner meinung nach gleich) aber die IF-Abfrage sieht das anders.
> ...




Strings IMMER mit equals vergleichen, niemals mit == oder !=

=> if ( a.equals(b) )


----------



## Christian Fein (18. August 2004)

Snape deine Antwort war natürlich richtig.

Ich gebe hier noch den Hintergrund dazu.

Strings sind Objecte. Sprich 
String a = new String("blub");
String b = new String(args[0]);

ist gleichbedeutend mit

String a = "blub";
String b = args[0];

Der Operator == testet nicht Wert Gleichheit sondern Objectgleichheit.
Das heisst er gibt nur dann den Wert true zurück wenn beide Operanden
das selbe Object referenzieren.

Es gibt sonderfälle in denen es sich eigentlich um verschiedene String Objecte handelt er aber dennoch bei einem == Test true zurückgibt, dafür ist der String Cache in der VM zuständig. 
Aber das kann mann aussen vor lassen.

Ein String Vergleich der nicht  Object Gleichheit sondern Wert gleichheit prüft (wie bei einem normalen Stringvergleich zumeist gewollt) wird durch die Methode equals durchgeführt.

String a = "blub";
if(a.equals(args[0])) .....;


----------



## Thomas Darimont (18. August 2004)

Hallo!

Kleiner Insider:


```
public class StringTest {

	public static void main(String[] args) {
		String str1 = new String("abc");
		String str2 = new String("abc");
		
		String str3 = "hallo";
		String str4 = "hallo";

		System.out.println(str1.intern() == str2.intern());
		System.out.println(str3 == str4);
	}
}
```

Gruß Tom


----------



## Sway (19. August 2004)

So macht das ganze doch Spass... Ich danke euch


----------

