Substring

Yurek

Mitglied
Hi,

mal eine kurze frage. Die folgenden Zeilen funktionieren:

Code:
public static void main(String args[]) {
        
        String str = "hi opa";
      
        String two = "hi"; //str.substring(0,2);
        System.out.println(two);
      
        if(two == "hi") System.out.println("funktioniert!!!");

       }

    }

Aber ändere ich zu String two = str.substring(0,2); dann funktioniert es nicht obwohl two auch als hi ausgegeben wird. Ich weiß lösen mit equals aber mich würde mal interessieren wieso das ganze hier mit substring nicht funktioniert!
Danke schon mal!
 

Dompteur

Top Contributor
Die JVM legt den String "hi" nur einmal an. Überall, wo "hi" verwendet wird, wird auf dieses eine Vorkommen verwiesen.
Dies ist möglich, da Strings immutable sind und keine Gefahr besteht, dass eine Änderung andere Vorkommen beeinflusst.
Das ist allerdings ein Implementierungsdetail und kann sich jederzeit ändern.
 

InfectedBytes

Top Contributor
Strings vergleicht man nicht mit ==, sondern mit equals.
Im ersten Fall funktioniert ==, da direkt beim kompilieren auf den gleichen String verwiesen wird.
Wenn du durch substring einen neuen String mit "hi" erzeugst, wird allerdings eben ein neuer String angelegt und somit liefert == false, da eben die Referenz verglichen wird.
Nutze daher leiber folgendes: "hi".equals(two)
 

klhlubek

Mitglied
Wenn du noch weitere Details nachlesen willst, dann suche mal nach dem Stichwort Konstantenpool.
Außerdem sind solche Vergleiche gerne mal Fragen in Prüfungen (;
 

Yurek

Mitglied
Andere Möglichkeit zu equals wäre also noch .intern();

Code:
public static void main(String args[]) {
      
        String str = "hi opa";
      
        String two = str.substring(0,2).intern();
        System.out.println(two);
    
        if(two == "hi") System.out.println("funktioniert!!!");

       }

Oder gleich kürzer:

Code:
public static void main(String args[]) {
       
        String str = "hi opa";
     
        if(str.substring(0,2).intern() == "hi") System.out.println("funktioniert!!!");

       }
 

InfectedBytes

Top Contributor
geht schon, aber damit sollte man vorsichtig sein, denn falls du deine Strings immer mit == vergleichst und dann einmal vergisst .intern() aufzurufen, hast du direkt einen Fehler, welcher schwer zu finden ist.
Außerdem sollte man nicht für jeden String intern auf rufen, sondern lieber nur für Strings die oft benötigt werden.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Substring in java Java Basics - Anfänger-Themen 3
Hzrfa S.substring Java Basics - Anfänger-Themen 38
Substring in einem String finden Java Basics - Anfänger-Themen 13
MasterNO substring in array Java Basics - Anfänger-Themen 1
P Methoden Namen trennen mit .substring(), char.At(), .lenght() Java Basics - Anfänger-Themen 8
A startsWith method und substring Java Basics - Anfänger-Themen 2
W Substring Array Java Basics - Anfänger-Themen 1
B substring() maximale Zeichenlänge festlegen? Java Basics - Anfänger-Themen 1
D Substring wiederholen Java Basics - Anfänger-Themen 33
M "substring()" mit Dateien und Pfadangaben Java Basics - Anfänger-Themen 5
Z Pattern und Matcher substring zu String möglich? Java Basics - Anfänger-Themen 4
F SubString in String zählen Java Basics - Anfänger-Themen 3
A Länge Substring Java Basics - Anfänger-Themen 1
S Substring - String index out of range Java Basics - Anfänger-Themen 11
A Probleme mit Substring Java Basics - Anfänger-Themen 2
L String.contains() - substring erstellen Java Basics - Anfänger-Themen 3
H Frage zu Substring(old, new) Java Basics - Anfänger-Themen 3
S String index out of range: 8 at java.lang.String.substring(Unknown Source) Java Basics - Anfänger-Themen 13
I Substring für ne Liste Java Basics - Anfänger-Themen 6
P Erste Schritte vergleich substring und string Java Basics - Anfänger-Themen 4
C Substring aus String - \n nicht beachten Java Basics - Anfänger-Themen 12
B String Methoden ! substring,indexOf,length... :( Java Basics - Anfänger-Themen 5
F String substring Java Basics - Anfänger-Themen 15
F Substring mittels RegEx ermitteln/ersetzen? Java Basics - Anfänger-Themen 2
D substring entfernt zuviele Zeichen Java Basics - Anfänger-Themen 16
G Java substring vereinfachen Java Basics - Anfänger-Themen 19
L Substring? Java Basics - Anfänger-Themen 5
B Problem mit substring Java Basics - Anfänger-Themen 3
J Substring zwischen Anführungszeichen finden Java Basics - Anfänger-Themen 10
G substring Java Basics - Anfänger-Themen 4
G Substring in String Java Basics - Anfänger-Themen 3
K Probleme mit substring? Java Basics - Anfänger-Themen 5
U substring(0, maxLength) Java Basics - Anfänger-Themen 2
T String beschneiden, Tokenizer und Substring bringen nix Java Basics - Anfänger-Themen 5
J Java Aufgabe -> String einlesen, splitten,Substring & Java Basics - Anfänger-Themen 3
G getName, substring Verwendung Java Basics - Anfänger-Themen 3
G Substring und Leerstellen Java Basics - Anfänger-Themen 2
I Fehler bei Verwendung von substring Java Basics - Anfänger-Themen 4
N Substring herausziehen funktioniert nicht! Java Basics - Anfänger-Themen 9
L Syntax von subString Java Basics - Anfänger-Themen 19
philipp If Abfrage von substring funzt net :( Java Basics - Anfänger-Themen 3
F String Methode subString() Java Basics - Anfänger-Themen 7
D Files Readen und Substring Java Basics - Anfänger-Themen 5
C Substring ersetzen Java Basics - Anfänger-Themen 3
D substring Frage Java Basics - Anfänger-Themen 2
G substring Java Basics - Anfänger-Themen 5
G Problem mit .substring() und Stringvergleich Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben