Java, błąd w dokumentacji ?

0

Witam,

może źle zrozumiałem kontekst zdania, ale wydaje mi się, że w dokumentacji Javy jest błąd. Chodzi mi o to zdanie:

"for example, String s = "this is a string";. String objects are immutable, which means that once created, their values cannot be changed"

Wynika z tego, że po stworzeniu obiektu typu String nie można zmienić jego wartości tak ? A przecież można.

Tutaj link do dokumentacji: http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

0

Jak można? Nie można. I pewnie nigdy nie będzie można.

0
 
String nowy = "Jeden";
        
nowy = "Dwa";
        
System.out.println(nowy);

Nie mogę wykonać takiej operacji ?

1

Możesz ale nie zmieniasz obiektu tylko jego referencje i wskazuje już na inny obszar pamięci.

Innymi słowy tworzysz nowego Stringa o wartosci "Dwa" i przypisujesz go do obiektu nowy

2

Tak właśnie - dlatego trzeba o tym pamiętać porównujac stringi operatorem ==

0

Dzięki za wytłumaczenie.

0
public static void doCheat(String str) {
    char[] chars = "lolwtf".toCharArray();

    try {
        Field valueField = String.class.getDeclaredField("value");
        valueField.setAccessible(true);
        valueField.set(str, chars);
    
        Field offsetField = String.class.getDeclaredField("offset");
        offsetField.setAccessible(true);
        offsetField.setInt(str, 0);
    
        Field countField = String.class.getDeclaredField("count");
        countField.setAccessible(true);
        countField.setInt(str, chars.length);
    } catch (Exception ex) {}
}

public static void main(String[] args) {
    String string = "a string";
    System.out.println(string);
    
    doCheat(string);
    System.out.println(string);
}

:d

1 użytkowników online, w tym zalogowanych: 0, gości: 1