415 Stimmen

Ist ein Java-String wirklich unveränderlich?

Wir alle wissen, dass String in Java unveränderlich ist, aber schau dir den folgenden Code an:

String s1 = "Hello World";  
String s2 = "Hello World";  
String s3 = s1.substring(6);  
System.out.println(s1); // Hello World  
System.out.println(s2); // Hello World  
System.out.println(s3); // World  

Field field = String.class.getDeclaredField("value");  
field.setAccessible(true);  
char[] value = (char[])field.get(s1);  
value[6] = 'J';  
value[7] = 'a';  
value[8] = 'v';  
value[9] = 'a';  
value[10] = '!';  

System.out.println(s1); // Hello Java!  
System.out.println(s2); // Hello Java!  
System.out.println(s3); // World  

Warum funktioniert dieses Programm so? Und warum wird der Wert von s1 und s2 geändert, aber nicht von s3?

0voto

Shehan Hasintha Punkte 977

Dies ist ein schneller Leitfaden zu allem

        // Character-Array
        char[] chr = {'O', 'K', '!'};

        // das ist die String-Klasse
        String str1 = new String(chr);

        // das ist verketten
        str1 = str1.concat("eine andere Zeichenfolge ");

        // das ist formatieren
        System.out.println(String.format(str1 + " %s ", "Zeichenfolge"));

        // das ist vergleichen
        System.out.println(str1.equals("eine andere Zeichenfolge"));

        // das ist teilen
        for(String s: str1.split(" ")){
            System.out.println(s);
        }

        // das ist Länge
        System.out.println(str1.length());

        // gibt einen Wert für die Gesamtänderung in der Länge an
        System.out.println(str1.compareTo("OK!eine andere Zeichenfolge Zeichenfolge"));

        // trimmen
        System.out.println(str1.trim());

        // intern
        System.out.println(str1.intern());

        // Zeichen an Position
        System.out.println(str1.charAt(5));

        // Teilzeichenfolge
        System.out.println(str1.substring(5, 12));

        // in Großbuchstaben umwandeln
        System.out.println(str1.toUpperCase());

        // in Kleinbuchstaben umwandeln
        System.out.println(str1.toLowerCase());

        // ersetzen
        System.out.println(str1.replace("eine andere", "Hallo"));

       //   Ausgabe

        // OK!eine andere Zeichenfolge  Zeichenfolge
        // false
        // OK!eine andere
        // Zeichenfolge
        // 20
        // 7
        // OK!eine andere Zeichenfolge
        // OK!eine andere Zeichenfolge 
        // o
        // andere s
        // OK!ANDERE ZEICHENFOLGE 
        // ok!eine andere Zeichenfolge 
        // OK!Hallo Zeichenfolge

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X