Scannerausgabe

jokos1105

Mitglied
Hallo zusammen :)

Ich habe so ein kleines Problemchen. Und zwar:

Der Scanner "s" liest daten aus einer Datei aus. Möchte ich diese nun verarbeiten z.B.

->String a = s.next();
->if(a == "Text") { System.out.println("Test erfolgreich"); }
->else { System.err.println("Fehler"); }

wird immer und immer wieder der Fehler text ausgegeben.
Ich hoffe ihr könnt mir helfen :)
 

jokos1105

Mitglied
Ich hoffe: Ein String wird bei "==" so überprüft ob diese Identisch ist oder nicht
Java:
String a = "Beispiel";
String b = a; //b ist nun identisch zu a

String c = "Beispiel"; //c ist jetzt gleich zu a und b

if(a == c) //Wird nicht ausgeführt da nicht identisch
{
//Ausführung
}
Nochmals vielen Dank :)
 

thecain

Top Contributor
Nur so der korrektheit halber

Java:
String a = "hallo";
String b = "hallo";

Ist equals und ==

Grund ist der Stringpool in java, welcher ausnutzt, das String immutable ist. Vergleichen tut man trotzdem wie schon erwähnt mit equals
 

VfL_Freak

Top Contributor
Ist equals und ==
Grund ist der Stringpool in java, welcher ausnutzt, das String immutable ist. Vergleichen tut man trotzdem wie schon erwähnt mit equals
Nein, stimmt so nicht unbedingt!

'==' vergleicht lediglich die Referenz, d. h. nur wenn beide Objekte wirklich auf denselben Platz im Arbeitsspeicher verweisen, dann ist diese Abfrage wahr. Ansonsten nicht!
Siehe gleich die ersten beiden Beispiele in meinen Link:
http://www.java-blog-buch.de/0302-strings-vergleichen/

Gruß Klaus
 

thecain

Top Contributor
Es macht eigtl auch nie sinn. Ich wollte nur darauf hinweisen, dass das "Beispiel" von joshi mit a == c true zurückgeben würde, eben wegen dem String Pool und die logik dahinter keine magie oder zufall ist
 

thecain

Top Contributor
War ja auch nicht pauschal, sondern auf das Beispiel von Joshi

Code (Java):
String a = "Beispiel";
String b = a; //b ist nun identisch zu a

String c = "Beispiel"; //c ist jetzt gleich zu a und b

if(a == c) //Wird nicht ausgeführt da nicht identisch
{
//Ausführung
}


Code:
String a = "Hallo"; //String pool
String b = "Ha"+"llo"; //String pool
Strinb c = new String("Hallo"); // Nicht String Pool
 

VfL_Freak

Top Contributor
Richtig :)

Und genau deswegen finde die Aussage, dass man Strings aus diesem Grund auch mit '==' vergleichen könne, sehr gewagt - vor allem gegenüber Programmierneulingen, die mit solchen Feinheiten sicher nichts anfangen können!
Schließlich vergleichst Du auch dabei eben nicht direkt den Stringinhalt sondern auch 'nur' die Objektreferenz und es kann halt nur "zufällig" mal TRUE heraus kommen!

Deswegen sollte man bei Fragen nach dem Vergleichen von String IMMER auf die Methode equals verweisen !!

Gruß Klaus
 

thecain

Top Contributor
Und genau deswegen finde die Aussage, dass man Strings aus diesem Grund auch mit '==' vergleichen könne, sehr gewagt - vor allem gegenüber Programmierneulingen, die mit solchen Feinheiten sicher nichts anfangen können!
Dann hast du mich falsch verstanden. Ich bin zu 100% deiner Meinung. Vergleichen soll man sie mit equals.
Es ging mir einfach darum, dass gerade genau in seinem Beispiel die if Bedingung eben doch ausgeführt worden wäre und ich es eine Erwähnung wert fand, warum dies so ist.
 

VfL_Freak

Top Contributor
Es ging mir einfach darum, dass gerade genau in seinem Beispiel die if Bedingung eben doch ausgeführt worden wäre und ich es eine Erwähnung wert fand, warum dies so ist
'Ausgeführt' würde sie immer ... und möglicherweise auch TRUE liefern ...
Nur hat man dabei dann eben nicht das verglichen, was man intuitiv glaubt!

Klar kann man das erklären, aber einen Anfänger verwirrt das doch nur, oder ?

Gruß Klaus
 

jokos1105

Mitglied
Verwirren tuts auf jedenfall wenns mal Funktioniert und dann wiederum nicht (Grund der Frage :)) als ich dann nach String.equals() gegooglet habe wurde mir das dann wieder klar warum das nicht so funktionierte :) Ich bin aufjedenfall der Meinung, dass das mit der Methode sofort angesprochen werden sollte, wenn if-abfragen geklärt werden, und nicht erst in späteren Kapiteln. Sowohl in Videos als auch Büchern :)
 

Neue Themen


Oben