String vergleich

Pherseus

Erfahrenes Mitglied
Code:
import java.io.*;

public class Rechnen
{
    public static void main(String[] args) throws IOException
    {
        float a, b, c, d;
        String din;
        BufferedReader eingabe = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("Bitte Wert 1 eingeben: ");
        a = Integer.parseInt(eingabe.readLine());
        System.out.println("Bitte Wert 2 eingeben ");
        b= Integer.parseInt(eingabe.readLine());
        System.out.println("Wollen sie Adieren (+) Subtrahieren (-) Dividieren (/) oder Multiplizieren (*) ");
        din= eingabe.readLine();
        System.out.println(din);
        
        if (din == "+") {
            d = a + b;
            System.out.println("a+b="+d);
        }
    }
}

Die if-Abfrage mit din == "+" klappt irgendwie nicht. Obwohl wenn ich System out mit din mache, + ausgegeben wird. Woran liegts?
 
Frage: seit welcher Java-Version kann denn auf einmal Strings mit == verglichen werden?

Ich war heut ziemlich verblüfft, dass dies jetzt neuerdings geht ..

LG, TB
 
"==" vergleicht die Referenz der beiden Strings. Es kann also schon passieren, dass sie als "gleich" betrachtet werden. Da mein bei Strings aber eben den Inhalt vergleichen will, sollte (muss) man equals benutzen.
 
ich meinte die Char sequence..
so sollte es sein, so habe ich es vor 10 Jahren gelernt, und ich selbst werde auch zukünftig Objekte mit equals() und die Referenzen mit == vergleichen ...

neuerdings werden aber bei Strings die Zeichenketten (also der Inhalt der Objekte) bei == miteinander verglichen.
Wir haben da mal gestern ein bisschen mit rumgespielt:

Es gibt anscheinend nur noch eine Möglichkeit, um bei string1==string2 ein false zu erhalten:
die beiden Strings müssen jeweils explizit mit dem Konstruktor String (String original) erzeugt werden.

ich stell' heut Abend mal den Code hier rein (hab grad wenig Zeit im Moment).


LG
 
Zuletzt bearbeitet:
Moin,

also, ich denke, dass nur folgendes gilt:

Code:
String s1 = new String("x");
String s2 = new String("x");

boolean b1, b2;  

// Ergibt true
b1 = s1.equals(s2);

// Ergibt false, da verschiedene Exemplare referenziert werden.
b2 = (s1==s2);

Alles andere würde mich dann auch sehr überraschen!
Bin mal gespannt auf den Code ... ;-]

Gruß
Klaus
 
Es gibt anscheinend nur noch eine Möglichkeit, um bei string1==string2 ein false zu erhalten:
die beiden Strings müssen jeweils explizit mit dem Konstruktor String (String original) erzeugt werden.

Ja, das liegt aber daran, dass er beim erstellen von String-Instanzen per " " o. Ä. nicht eine neue Instanz erstellt, sondern auf eine vorhandene refferiert, sofern bereits eine mit den selben chars existiert. Bei new String() nicht.
 
beim stringvergleich wird mit "==" die speicheradresse verglichen, die nur dann gleich ist,wenn es tatsächlich dasselbe (nicht das gleiche******) objekt ist...also kann mich den vorrednern nur anschließen--> equals nutzen :)
 
Zurück