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

Sway

Erfahrenes Mitglied
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.


Code:
 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)
 
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.


Code:
 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)


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

=> if ( a.equals(b) )
 
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])) .....;
 
Hallo!

Kleiner Insider:

Code:
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
 
Zurück