if block mit equals im rumpf

dempsey

Mitglied
Ich habe mal eine recht simple Frage. Ich habe eine ganz normale IF-Else abfrage gemacht aber es hatte nicht funktioniert. Nun habe ich den Tip bekommen, die Abfrage anders zu gestalten. Es funktioniert jetzt auch so wie ich es haben möchte aber ich weiss nicht warum. Kann mir das wer mit einfachen Worten erläutern?

Java:
 if("String1".equals(oString)){
            System.out.println("if1");
        }
        else if("String2".equals(oString)){
            System.out.println("elseif2");
        }
        else if("String3".equals(oString)){
            System.out.println("elseif3");
        }
        else{
            System.out.println("keine option!!!");
        }


Und so hatte ich es vorher gehabt (funktionierte nicht)

Java:
        if(oString == "String1"){
            System.out.println("if1");
        }
        else if(oString == "String2"){
            System.out.println("elseif2");
        }
        else if(oString == "String3"){
            System.out.println("elseif3");
        }
        else{
            System.out.println("keine option!!!");
        }

oString wird als Parameter in die Funktion übergeben
 

amarus

Mitglied
Du hast bei deiner IF-Schleife nur einen Vergleich auf die Referenz des Strings geprüft aber nicht auf den "Inhalt" des String. Bei der jetzigen Version wird das mit der Methode ".equals" geprüft, deshalb funktioniert es jetzt ;-)
 

Network

Top Contributor
Das ist das "dasselbe" und "das Gleiche"-Problem.
Solltest du bestimmt schonmal gehört haben, die Leute laufen auf den Straßen en mass herum die nur darauf warten einen zu verbessern mit dem Satz "dasselbe oder das Gleiche?".

"Equals" stellt dar: das Gleiche
"==" stellt dar: dasselbe
Zwiebelfisch-Abc: dasselbe/das Gleiche - SPIEGEL ONLINE

Wenn du einen String mit einem anderen vergleichst und zwar so
Java:
"Hi" == "Hi"
wird im compilierten Code daraus soetwas wie: (Sind eigentlich StringBuilder und Methoden dieser)
Java:
new String() == new String()
Wie du siehst handelt es sich nicht um dieselben Objekte, aber sie sind sich sehr ähnlich, da sie beide die selben Buchstaben beinhalten, deshalb sind sie die gleichen Objekte und wenn man prüfen möchte ob zwei Objekte sich einander gleichen benötigt man .equals( Object o );

Gruß
Net
 
Zuletzt bearbeitet:

njans

Top Contributor
Der == Operator prüft auf Referenzgleichheit, also zeigen die Objekte auf den selben Eintrag im Speicher.
Equals() überprüft auf Gleichheit, was auch immer das für ein Objekt bedeutet.
 
T

Tomate_Salat

Gast
@Network stimmt so Leider nicht:

Java:
if("Hi"=="Hi") <--- true
if(new String("Hi")==new String("Hi")) <--- false

Das manchmal true rauskommt, hängt mit dem Stringpool zusammen. Einmal erzeugte Strings werden darin abgelegt und wiederverwendet. Deswegen ist der Vergleich mit == oft wahr, aber nicht immer.
 

Network

Top Contributor
@Network stimmt so Leider nicht:

Java:
if("Hi"=="Hi") <--- true
if(new String("Hi")==new String("Hi")) <--- false

Das manchmal true rauskommt, hängt mit dem Stringpool zusammen. Einmal erzeugte Strings werden darin abgelegt und wiederverwendet. Deswegen ist der Vergleich mit == oft wahr, aber nicht immer.

Entschuldige meine Ausdrucksweise - ich werde mich selbst zensieren:
Das ist doch ****** egal für den Fragesteller ???:L Das ist eine dämliche extra Besonderheit von Strings die nur zur Verwirrung führt und keinesfalls in der Praxis tatsächlich angewandt werden sollte oder berücksichtig. Das ist doch nur klugs******* :pueh:
So vielen Dank :D
(Das war zwar ernstgemeint aber die zensierten Ausdrucksweisen dienten nur zur Verstärkung des Tons :D)
 
Zuletzt bearbeitet:
T

Tomate_Salat

Gast
Das ist doch sch*** egal für den Fragesteller

Wäre ich der TO, dann würde mich der Grund interessieren und verwirrend sollte das auch nicht sein. Hier wird einfach recycling betrieben ;-). Angewandt werden sollte da garnichts. Einfach immer bedenken, dass man komplexe Objekte mit .equals vergleicht und eben nicht mit == (außer man prüft eben die referenz).
 
S

SlaterB

Gast
@Network
nana, wenn man das überhaupt weiter ausführt, dann doch besser nicht komplett in die falsche Richtung, sondern überzeugend erklären:
gerade [c]"Hi" == "Hi"[/c] ist der Problemfall, der tatsächlich mit true geht, weswegen das == bei String zu funktionieren scheint,

der Compiler wäre schön doof, da ständig neue "Hi" zu erzeugen, auch in verschiedenen Klassen direkt im Code abgelegt,
durch die Variablen gewandert sind solche Strings durchaus gleich, ich denke sogar in der Regel, nicht 'oft', auch nicht 'manchmal'

(besonders ist [c]new String( "Hi" )[/c] gar keine Lösung, nur eine rekursive Verschiedung, woher kommt das "Hi" als Parameter?
wenn es schon ein fertiger String ist, wieso dann noch new String() drumherum?)


-----

dagegen gibt es Strings aus Dateien, aus Texteingaben usw., auch da könnte ein "Hi" dabei sein,
aber die Laufzeitumgebung wird nicht mühsam nachschauen, ob es diesen String schon im Pool gibt,
sondern einen neuen String char für char konstruieren,
dieser ist dann der gleiche, aber nicht derselbe
 
Zuletzt bearbeitet von einem Moderator:
T

Tomate_Salat

Gast
der Compiler wäre schön doof, da ständig neue "Hi" zu erzeugen, auch in verschiedenen Klassen direkt im Code abgelegt,
durch die Variablen gewandert sind solche Strings durchaus gleich, ich denke sogar in der Regel, nicht 'oft', auch nicht 'manchmal'

[OT]
:popcorn: der Satz hats in sich :D
[/OT]
 

Timothy Truckle

Top Contributor
dagegen gibt es Strings aus Dateien, aus Texteingaben usw., auch da könnte ein "Hi" dabei sein,
aber die Laufzeitumgebung wird nicht mühsam nachschauen, ob es diesen String schon im Pool gibt,
sondern einen neuen String char für char konstruieren,
Um die Verwirrung weiter zu treiben könnte man, wenn man weiß, das diese eingelesenen String oft den selben Inhalt haben nach dem Einlesen mit der
Code:
intern()
-Methode das im StringPool befindliche Objekt holen.

Das macht aber nur dann Sinn, wenn man mit einem OutOfMemoryError kämpft und andere Lösungen bereits versagt haben, als letzter Strohalm so zusagen...

bye
TT
 
S

SlaterB

Gast
halb Offtopic:
ach, wenn man so anfängt dann lieber gar nicht auf den Pool bauen, wer weiß ob der tatsächlich nun da ist, trotz aller 'Regel',
zumal vielleicht Rest der Programmlaufzeit unnötig zugemüllt, temporär reicht, etwa für eine große DB-Abfrage
->
ich hab schon überlegt, bei manchen solchen Fällen eine Map aufzubauen..
bisher konnte ich mich aber noch zusammenreißen

dann auch BigDecimal für Zahlen, Date usw.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Größter zusammenhängender Block gleicher Zeichen im String Java Basics - Anfänger-Themen 1
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
D try/catch-Block bei for-Schleife Java Basics - Anfänger-Themen 14
Zwanglos Warum wird nur die erste Zeile im while Block ausgeführt? Java Basics - Anfänger-Themen 8
B Try-Catch Block Java Basics - Anfänger-Themen 3
F Mehrere Exceptions in einem Catch-Block abfangen Java Basics - Anfänger-Themen 12
E Synchronisierte Methoden vs. Synchronized(lockObject) Block Java Basics - Anfänger-Themen 7
A break; mit Einfluss hinter else if Block Java Basics - Anfänger-Themen 3
tsom Erste Schritte itext Text als Block auf neue Seite Java Basics - Anfänger-Themen 0
J Code in Try-Catch Block wird nicht komplett ausgeführt Java Basics - Anfänger-Themen 5
A Nicht zu findender Fehler in einem try/catch Block Java Basics - Anfänger-Themen 6
E Buchstaben verhindern / Try & Catch Block Java Basics - Anfänger-Themen 3
L Warum ist der catch-Block nicht erreichbar ? Java Basics - Anfänger-Themen 8
B Input/Output NIO: Block-Move Java Basics - Anfänger-Themen 14
T Threads Join() = Block? oO Java Basics - Anfänger-Themen 4
B Classpath static block - Verwirrung Java Basics - Anfänger-Themen 2
J Methoden Wert im Block einer for-Schleife wird nicht aktualisiert Java Basics - Anfänger-Themen 9
J Grosses einmaleins 5er Block Ausgabe Java Basics - Anfänger-Themen 3
S Schlüsselworte Thread Block sprerren Java Basics - Anfänger-Themen 8
H .class und static Block ? Java Basics - Anfänger-Themen 4
N Catch Block in Try erzwingen Java Basics - Anfänger-Themen 14
E Problem mit for schleife/ try-catch block Java Basics - Anfänger-Themen 7
S if-Block dynamisch aufbauen Java Basics - Anfänger-Themen 5
N try and catch block in finally Java Basics - Anfänger-Themen 8
H Finalize Block blockiert Programmablauf Java Basics - Anfänger-Themen 15
A Datentypen problem return aus try-block Java Basics - Anfänger-Themen 4
D Scanner hasNext(Line)() Block Problematik... Java Basics - Anfänger-Themen 6
B Exception vor catch Block definieren Java Basics - Anfänger-Themen 9
V Was ist ein Try-Catch Block Java Basics - Anfänger-Themen 4
Z Applet mit einem beweglichem Block Java Basics - Anfänger-Themen 7
G static block und konstanten Java Basics - Anfänger-Themen 2
R wait() in synchronized - Block oder nicht? Java Basics - Anfänger-Themen 4
G Verschiedene Exceptions zu gleichem Block Java Basics - Anfänger-Themen 6
G InputStream im finally-Block schließen Java Basics - Anfänger-Themen 7
F reiner Code-Block Java Basics - Anfänger-Themen 6
G If-Block und String Java Basics - Anfänger-Themen 3
M Exception->mehrere Exceptions in einem Catch Block behand Java Basics - Anfänger-Themen 4
Say Equals Java Basics - Anfänger-Themen 6
W LocalDate vergleichen mit Equals? Java Basics - Anfänger-Themen 7
W Equals-Methode überschreiben bei composition Java Basics - Anfänger-Themen 20
W Wann und warum hashcode und equals? Java Basics - Anfänger-Themen 14
X Datentypen String.equals funktioniert nicht Java Basics - Anfänger-Themen 5
C Long value an Stringbuilder übergeben, equals Methode funktioniert nicht Java Basics - Anfänger-Themen 2
J compareTo()- und equals-Methode Java Basics - Anfänger-Themen 3
S 2 Strings mit Equals vergleichen Java Basics - Anfänger-Themen 11
lallmichnichtzu Methoden Überladen des .equals-Operators Java Basics - Anfänger-Themen 6
C Objekt1.equals(Objekt2) = immer false. Wieso? Java Basics - Anfänger-Themen 22
NeoLexx equals()-Methode Verständnis Frage anhand Code Beispiel Java Basics - Anfänger-Themen 22
M Objekte mittels equals vergleichen Java Basics - Anfänger-Themen 14
S Interface Equals und hashCode Java Basics - Anfänger-Themen 16
G Java equals() Methode Java Basics - Anfänger-Themen 9
J equals funktioniert nicht - Warum Java Basics - Anfänger-Themen 13
B Date - Vergleich (equals / after) ? Java Basics - Anfänger-Themen 3
G Ratlosigkeit zur Aufgabe im Anhang (boolean, equals.) Java Basics - Anfänger-Themen 20
D Unterschied == und equals in Arrays Java Basics - Anfänger-Themen 2
O equals Methode möglichst effizient Java Basics - Anfänger-Themen 13
H equals methode Java Basics - Anfänger-Themen 1
L Logistiksystem Methode equals und hashcode Java Basics - Anfänger-Themen 20
J Methoden Equals Methode für Integer und Objekte überschreiben? Java Basics - Anfänger-Themen 9
M Erste Schritte Mehrere eingaben in einer Line vergleichen (if equals...) Java Basics - Anfänger-Themen 6
I equals (Override) mit eigener Exception (keine Runtime-Exception) Java Basics - Anfänger-Themen 9
A OOP Richtige Verwendung von ArrayList und equals Java Basics - Anfänger-Themen 24
E equals Prüfung fehlgeschlagen Java Basics - Anfänger-Themen 3
C Objekt equals Java Basics - Anfänger-Themen 2
L String überprüfen mit .equals .contains oder .matches? Java Basics - Anfänger-Themen 1
H equals Methode Java Basics - Anfänger-Themen 1
F String equals NULL Problem Java Basics - Anfänger-Themen 4
D Auf equals von Vaterklasse zugreifen Java Basics - Anfänger-Themen 4
S Methoden equals(object o) / toString Java Basics - Anfänger-Themen 15
E Calender - Equals Problem Java Basics - Anfänger-Themen 14
T Datentypen compareTo() u. equals() bei Strings Java Basics - Anfänger-Themen 3
Psypsy hashCode, equals und toString Java Basics - Anfänger-Themen 3
K hashCode, compareTo vs. equals Java Basics - Anfänger-Themen 3
M Vergleich zweier Array Stellen mit equals/NullpointerException Java Basics - Anfänger-Themen 9
S Unterschiede zwischen equals und contains Java Basics - Anfänger-Themen 2
F Erste Schritte Hilfe bei Übung zu String equals() und Schleifen Java Basics - Anfänger-Themen 8
A Probleme mit equals und get.Text Java Basics - Anfänger-Themen 12
S compareTo() und equals() Java Basics - Anfänger-Themen 6
S equals Methode bei String Java Basics - Anfänger-Themen 5
R illegal start of expression - 3 Strings vergleichen mit .equals () Java Basics - Anfänger-Themen 5
K Cast bei equals Java Basics - Anfänger-Themen 2
T SQL equals Java Basics - Anfänger-Themen 4
OnDemand Methoden Equals Methde Java Basics - Anfänger-Themen 3
K Vererbung equals-Methode bei Vererbung abstrakter Klassen Java Basics - Anfänger-Themen 8
SexyPenny90 Wieso ist diese eigene Equals-Methode schlecht? Java Basics - Anfänger-Themen 17
K String - Equals Java Basics - Anfänger-Themen 2
J Klassen Warum ist (a.equals(b)) gleich (a==b)? Java Basics - Anfänger-Themen 13
B Warum gibst hier Equals false zurück ? Java Basics - Anfänger-Themen 23
S Verständnissfrage equals() Java Basics - Anfänger-Themen 2
R compareTo & equals Java Basics - Anfänger-Themen 10
M Verschiedene Möglichkeiten mit 'equals' abdecken? Java Basics - Anfänger-Themen 9
M Collections Problem bei Überschreibung von hashcode() und equals() bei Hashset-Implementierung Java Basics - Anfänger-Themen 5
W Stringvergleich mit equals Java Basics - Anfänger-Themen 13
C equals() Java Basics - Anfänger-Themen 4
D Problem mit string.equals bzw string.contains Java Basics - Anfänger-Themen 4
T Problem mit der while(!string.equals("x")) Java Basics - Anfänger-Themen 2
E Equals-Methode auf Class-Object Java Basics - Anfänger-Themen 17
X problem mit equals.gelöst Java Basics - Anfänger-Themen 2
J Methode equals() Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben