if und else spielen verrückt

Status
Nicht offen für weitere Antworten.

feuerzeug

Neues Mitglied
hallo ihr :D

ich beschäfftige mich seit ein paar tagen mit java und will das durchziehen, nur bekomme ich jetzt schon kopfschmerzen :bahnhof:

zur info ich benutze netbeans 5.5

hier der code:

Code:
InputStreamReader i_stream = new InputStreamReader (System.in);
        BufferedReader buffer_r = new BufferedReader (i_stream);
        
               
        String name = buffer_r.readLine();
        String ich = "maik";
        
        if ( name == ich ) System.out.println("hallo maik");
        else System.out.println("wer bist du");


hier der gleiche nur bissl anders:

Code:
InputStreamReader i_stream = new InputStreamReader (System.in);
        BufferedReader buffer_r = new BufferedReader (i_stream);
        
               
        String name = buffer_r.readLine();
        
        
        if ( name == "maik" ) System.out.println("hallo maik");
        else System.out.println("wer bist du");


ich gebe immer maik ein

bei beiden kommt raus:

wer bist du

habe ich hier nen schusselfehler oder warum klappt das nicht?? wäre nett wenn mir jemand hilft.

mfg feuerzeug
 

andre111

Bekanntes Mitglied
statt
Code:
name == "maik"
musst du
Code:
name.equals( "maik" )
schreiben, weil du mit equals den inhalt des Strings vergleichst und mit == die Objektreferenz
 

feuerzeug

Neues Mitglied
aha das wusste ich nicht. danke.

nur nochmal verständnisshalber:

Code:
String name = buffer_r.readLine();
        String ich = "maik";
       
        if ( name == ich ) System.out.println("hallo maik");


wenn ich der variablen -->ich<-- den string/wert -->maik<-- zuweise kann ich es auch nicht mit

Code:
name == ich

vergleichen???

mfg feuerzeug
 

andre111

Bekanntes Mitglied
ja, aber wenn du Strings vergleichen willst, mach es immer mit equals...
Dazu steht auch in der faq nochmal eine genaue erklärung dazu
 
G

Guest

Gast
Mit == machst du einen Referenzvergleich. Das heisst, Variable A zeigt auf die gleiche Speicherstelle, wie Variable B.
Ausnahme sind primitive Typen wie chat, int, long, float, double etc., bei diesen erfolgt ein Wertvergleich.
Halte dich einfach an die Regel: Bei Instanzen einer Klasse immer über equals vergleichen, bei primitiven Typen über
den Vergleichsoperator ==.
Seit JDK 1.5 sind ist noch Autoboxing dazugekommen, so dass auch bei den Wrappertypen Character,
Integer, Long, Float, Double ein solcher Vergleich möglich ist... aber lass das mal für's erste.
 

Landei

Top Contributor
Das Problem mit dem String-Vergleich wird vielleicht so am deutlichsten
Code:
System.out.println(new String("bla") == new String("bla")); //false
 
D

diel2001

Gast
Hallo
ich erkläre es dir
Code:
String s1 = "hallo"; // String mit Zeichensatz "hallo"
String s2 = "hallo"; // String mit Zeichensatz "hallo"
String s3 = new String("hallo"); // neues Object
String s4 = new String("hallo"); // neues Object

s1.equals(s2); //true 
s1.equals(s3); //false
s3.equals(s4); //false
Bei s1 und s2 wird nur der Zeichensatz übergeben, dass heißt es ist der gleiche.
Die equals Methode ist für String nämlich überschrieben, dass wenn 2 zeichensätze verglichen werden,
sind sie gleich.

Bei s3 und s4 weden neue Objecte erstellt die zeigen alle auf ein anderes Object,
also sind Sie nicht gleich.

Ich mache es noch deutlicher und zwar :
Code:
MeineKlasse mk1 = new MeineKlasse(); // neues Object
MeineKlasse mk2 = new MeineKlasse(); // wieder neues Object
MeineKlasse mk3 = mk2;

mk1.equals(mk2); //false
mk2.equals(mk3); //true

mk1 und mk2 könnte man auch noch besser vergleichen .
Und zwar indem man die equals und die hashCode Methode
vernünftig implementiert in MeineKlasse.
Das ist aber ein etwas komplizierteres Thema.
Ich hoffe, dass es verständlich ist.
Falls noch Fragen sind einfach posten
 

andre111

Bekanntes Mitglied
diel2001 hat gesagt.:
Code:
MeineKlasse mk1 = new MeineKlasse(); // neues Object 
MeineKlasse mk2 = new MeineKlasse(); // wieder neues Object 
MeineKlasse mk3 = mk2; 

mk1.equals(mk2); //false 
mk2.equals(mk3); //true

ich glaube hier meinst du eher

Code:
MeineKlasse mk1 = new MeineKlasse(); // neues Object 
MeineKlasse mk2 = new MeineKlasse(); // wieder neues Object 
MeineKlasse mk3 = mk2; 

mk1 == mk2; //false 
mk2 == mk3; //true

ansonsten würde mk1.equals( mk2 ) true ergeben
 
D

diel2001

Gast
So habe nochmal ein Test gemacht um die letzte Aussage des Vorposters
zu widerlegen


Code:
public class Test02 {


	public static void main(String[] args) {
	
		NotEquals ne1 = new NotEquals();
		NotEquals ne2 = new NotEquals();
		NotEquals ne3 = ne2;
		
		System.out.println(ne1.equals(ne2));//false
		System.out.println(ne1 == ne2);//false
		System.out.println(ne2.equals(ne3));//true
		System.out.println(ne2 == ne3);//true
		
	}

}
class NotEquals{}
Ich wusste nämlich das ich recht haben muss und das hatte mich verwirrt

Das stimmt nämlich nicht :
ansonsten würde mk1.equals( mk2 ) true ergeben


P.S habe es gerade getestet
Ich werde die Tage mal versuchen zu dem Thema ein Tut zu schreiben
wenn es erwünscht ist .
 

Andreas29

Bekanntes Mitglied
Hi,

ein Hinweis noch, zu dem, was Andre111 geschrieben hat:
Ich würde mir von vorneherein angewöhnen, in solchen Vergleichen mit equals IMMER die Konstante nach vorne zu schreiben. Also statt:
Code:
string.equals("maik")

lieber
Code:
"maik".euqals(string)

Hintergrund ist folgender:
Wenn string null ist, stirbt erste Version mit einer NullPointerException, während zweite Version einfach false liefert...

Ich weiß, für kurze Übungsprogramme mag das nicht notwendig erscheinen, weil man da meistens noch überblicken kann, ob eine Variable null sein kann oder nicht. Aber ich bin der Meinung, wenn man etwas lernt, dann am besten gleich richtig...

Liebe Grüße,
Andy
 

Marco13

Top Contributor
Andreas29 hat gesagt.:
Ich würde mir von vorneherein angewöhnen, in solchen Vergleichen mit equals IMMER die Konstante nach vorne zu schreiben.

Dem Argument an sich stimme ich prinzipiell zu, allerdings ist das IMMER hier ein bißchen zu stark hervorgehoben: Man sollte sich im Einzelfall schon überlegen, ob der String, um den es da geht, überhaupt 'null' sein KANN (und wenn nicht, dann ist eine NullPointerException an dieser Stelle genau das richtige Verhalten!) oder ob er null sein DARF, und WAS ggf. genau passieren soll, wenn er null ist....

Ich persönlich finde auch eine Abfrage wie
Code:
if (string != null && string.equals("Bla")) ...
nicht verkehrt (jaja, ich weiß, dass einige das anders sehen, aber) dort sieht man, dass der Fall, dass der string null ist, explizit berücksichtigt wurde.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T if-else Bedingung wird ignoriert Java Basics - Anfänger-Themen 4
I If / Else in Setter? Java Basics - Anfänger-Themen 8
M If-Else Java Basics - Anfänger-Themen 5
monsterherz if / else if mit Fehler den ich leider nicht finde Java Basics - Anfänger-Themen 11
laxla123 Verschachtelte If-Else Schleife Java Basics - Anfänger-Themen 21
laxla123 If-else Java Java Basics - Anfänger-Themen 4
luggas89 If else auch mit unterschiedlichen Antworten Java Basics - Anfänger-Themen 5
J In der Ausgabe wird ohne Eingabe in den else Block gesprungen. Java Basics - Anfänger-Themen 0
J In der Ausgabe wird ohne Eingabe in den else Block gesprungen. Java Basics - Anfänger-Themen 5
W Verschachtelte If-else --> finde meinen Fehler nicht Java Basics - Anfänger-Themen 30
pumpgun99 Fehler Meldung "else without if" Java Basics - Anfänger-Themen 3
B Scanner-If/else kleine Abhebungs-Simulation Java Basics - Anfänger-Themen 3
A Übung Else if Java Basics - Anfänger-Themen 2
M Else wird nicht ausgeführt. Java Basics - Anfänger-Themen 5
L If und else bei 2 Dimensionalen Arrays Java Basics - Anfänger-Themen 8
F if else if anfängerfrage Java Basics - Anfänger-Themen 22
T if else Befehl funktioniert nicht richtig Java Basics - Anfänger-Themen 27
C Problem mit If Else If und Überprüfung eines Counters Java Basics - Anfänger-Themen 3
T "Einkauf" & if else Struktur Java Basics - Anfänger-Themen 7
steven789hjk543 Input mit if-else Java Basics - Anfänger-Themen 23
H ERGÄNZUNGSFRAGE: Klammersetzung bei if-else Anweisungen und Schleifen Java Basics - Anfänger-Themen 2
A break; mit Einfluss hinter else if Block Java Basics - Anfänger-Themen 3
R else without if error Java Basics - Anfänger-Themen 5
F Methoden Verschachtelte if else Methode Java Basics - Anfänger-Themen 10
M Java Taschenrechner (if-else) Java Basics - Anfänger-Themen 11
C Variablen 'else' without 'if' Java Basics - Anfänger-Themen 4
F If - Else Java Basics - Anfänger-Themen 3
F Variablen If else: Einer Variable einen Wert hinzufügen oder so? Java Basics - Anfänger-Themen 6
I if/else Statements Java Anfänger Java Basics - Anfänger-Themen 14
M jOptionPane mit if else Java Basics - Anfänger-Themen 16
K Frage zu If & else if Java Basics - Anfänger-Themen 5
R else if anweisungen Java Basics - Anfänger-Themen 2
Y Problem mit If-Else Verzweigung! Java Basics - Anfänger-Themen 9
A Warum funktioniert switch aber nicht if/else? Java Basics - Anfänger-Themen 23
Hijo2006 If-else Java Basics - Anfänger-Themen 6
P Erste Schritte Taschenrechner mit if-else Anweisung Java Basics - Anfänger-Themen 6
T If/ Else If (zurückkehren) Java Basics - Anfänger-Themen 4
O Grosse If / Else verschachtelung übersichlitcher gestlten Java Basics - Anfänger-Themen 6
S Erste Schritte Unterschied "if" und "else if" Java Basics - Anfänger-Themen 27
M If in einem else Java Basics - Anfänger-Themen 14
A boolean Methode ohne If und else Java Basics - Anfänger-Themen 1
J Mehrere IF Anweisungen und dazugehörige ELSE Java Basics - Anfänger-Themen 6
C else in if umschreiben Java Basics - Anfänger-Themen 2
J Fehlermeldung else without if Java Basics - Anfänger-Themen 5
P Compiler-Fehler wieso zeigt der compiler ein else without if? Java Basics - Anfänger-Themen 3
E If...else... Java Basics - Anfänger-Themen 7
G Mehrere If-else-Sätze der Reihe nach durchlaufen lassen Java Basics - Anfänger-Themen 2
C If Else Frage Java Basics - Anfänger-Themen 2
M if, else Anweisung Java Basics - Anfänger-Themen 3
J Ergebnis wird gespammt sowie eine else if Frage Java Basics - Anfänger-Themen 2
A instanceof-if-else-Anweisungen eleganter lösen Java Basics - Anfänger-Themen 5
O if and else geht nur manchmal Java Basics - Anfänger-Themen 17
V Operatoren Java if-else argument Java Basics - Anfänger-Themen 4
D Keine Funktion bei "else" Java Basics - Anfänger-Themen 5
P [ANFÄNGER] if else funktioniert nicht Java Basics - Anfänger-Themen 4
T If, else Problem Java Basics - Anfänger-Themen 12
C IF-Else Verknüpfungen Java Basics - Anfänger-Themen 10
Uzi21 if - else Abfrage Java Basics - Anfänger-Themen 6
T Problem im If-Else-Statement Java Basics - Anfänger-Themen 4
R if funktion ohne else - Bedingung trifft nicht zu, ausgabe nicht nachvollziehbar Java Basics - Anfänger-Themen 7
T If ; else error on system token delete Java Basics - Anfänger-Themen 5
N Best Practice Stilistische Anwendung von if/else-Abfragen Java Basics - Anfänger-Themen 7
L else without if Fehler Java Basics - Anfänger-Themen 14
F try/catch - (else) Java Basics - Anfänger-Themen 11
H Worauf bezieht sich die erste else-Anweisung Java Basics - Anfänger-Themen 9
S if und else problem... Java Basics - Anfänger-Themen 13
Q if-else Logikproblem Java Basics - Anfänger-Themen 4
M Probleme mit else if Java Basics - Anfänger-Themen 15
M Erste Schritte Break-Anweisung bei if-else Java Basics - Anfänger-Themen 6
B OOP If und else in Main class einbinden Java Basics - Anfänger-Themen 9
T Erste Schritte switch case Anweisung und if else Verzweigungen? Java Basics - Anfänger-Themen 6
K Bedingungen else Java Basics - Anfänger-Themen 7
B if-else in einer schleife Java Basics - Anfänger-Themen 14
J Erste Schritte If-Else Idee gesucht Java Basics - Anfänger-Themen 6
T if else Java Basics - Anfänger-Themen 8
R boolean, if-else Java Basics - Anfänger-Themen 7
M if then else geht nicht Java Basics - Anfänger-Themen 10
P int-Wertevergleich mit if-else-Verzweigung Java Basics - Anfänger-Themen 3
P If-else-Verzweigung Java Basics - Anfänger-Themen 9
E Compiler-Fehler Fehler: else without if Java Basics - Anfänger-Themen 11
D Java Einsteiger (boolean, if-else etc.) Java Basics - Anfänger-Themen 7
I Methoden Problem If/Else; Public Void Java Basics - Anfänger-Themen 6
P Anzahl der else if Operatoren begrenzt?? Java Basics - Anfänger-Themen 7
K Mal wieder ein Problem mit If / Else Java Basics - Anfänger-Themen 10
K Anfänger If / Else Problem Java Basics - Anfänger-Themen 5
C if else Abfrage Java Basics - Anfänger-Themen 11
T Umschreiben von switch in if else und umgekehrt Java Basics - Anfänger-Themen 9
C Schleifen, if, else......? Java Basics - Anfänger-Themen 8
2 if und else Java Basics - Anfänger-Themen 9
L If/else nicht korrekt ausgeführt. Java Basics - Anfänger-Themen 22
E Verschachtelte If-Anweisungen - "else without if" Java Basics - Anfänger-Themen 4
S Brauche Hilfe bei if/else Java Basics - Anfänger-Themen 3
S if-else Java Basics - Anfänger-Themen 22
A ein if else problem Java Basics - Anfänger-Themen 13
N If-else-If Leiter Java Basics - Anfänger-Themen 9
U Dringend: Syntax error on token "else" Java Basics - Anfänger-Themen 8
L if else anweisung Java Basics - Anfänger-Themen 2
M If/Else mit Zahlenfolge Java Basics - Anfänger-Themen 13
B Problem mit Variable und if/else Java Basics - Anfänger-Themen 6
H alternativen zu if .. else .. Java Basics - Anfänger-Themen 11

Ähnliche Java Themen

Neue Themen


Oben