Vergleich von Strings schlägt fehl..

Hallo,

ich habe bisher zwei Springs immer mit:
String s = "s";
String a = "s";
if (a==s)..........

verglichen, dass klappte auch bisher immer.
Jetzt habe ich das Problem, dass dies bei folgender Funktion nicht geht, wahrscheinlich weil ich den char in ein String umformen lasse..
Java:
randomnumber = random.nextInt(2);
                if (randomnumber < 0){
                    randomnumber = randomnumber * -1;
                }
                randomstart = (char)('a'+randomnumber);
                start = start.valueOf(randomstart);

Wenn ich jetzt Start mit einem String, sagen wir z.B. "b" vergleiche schlägt dies immer fehl, auch wenn der String Start ganz sicher b beinhaltet..

Habt ihr eine Lösung wie ich ohne den String aufgeben zu müssen weiterhin vergleichen kann?
 
Hintergrundinformation, warum der Vergleich bei:
Java:
String a = "s";
String b = "s";
if (a == b) ...
immer true ergibt:

Laut der Java SE Spezifikation müssen compilezeit-Stringkonstanten, die ja in der .class Datei als Konstanten stehen, IMMER String.intern()'ed werden, wenn die Klasse in der JVM definiert wird. Siehe hierzu letzter Satz in dem Abschnitt 15.28.: https://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.28

a = String.intern(b) liefert hierbei für jede unterschiedliche Instanz b eines Strings mit demselben Inhalt immer dieselbe Instanz zurück.

Das ganze sorgt dafür, dass für viele gleiche Stringkonstanten nicht viele unterschiedliche String-Instanzen/Objekte mit demselben Inhalt erzeugt werden, sondern immer nur ein einziger Stellvertreter.

Du solltest hier also unbedingt dem Rat von @Flown folgen, und niemals Strings per '==' Operator vergleichen, sondern immer nur per equals() Methode.
 

Zurück
Oben