2013-04-20 19 views
5

Zastanawiam się, czy tablice string w Javie są zmienne? Wiem, że Strings są niezmienne, ale co z tablicami sznurkowymi?Czy tablice ciągów są zmienne?

Jeśli mam tablicę napisów i zmieniam zawartość, czy zostanie utworzony nowy obiekt ciągu? Czy też zmieni się rzeczywista wartość?

góry dzięki

+0

Tablice w Javie są zmienne, nie zależą od typu tablicy, w każdym razie będą zmienne. – bsiamionau

Odpowiedz

13

The String s zawartych w String[] rzeczywiście są niezmienne, ale tablica jest zmienny.

ta jest dobrze wyjaśnione w this answer:

  • Niezmienność oznacza, że ​​obiekty określonego typu nie mogą zmieniać się w znaczący sposób do zewnętrznych obserwatorów
    • Integer, String, etc są niezmienne
    • Ogólnie wszystkie typy wartości powinny być następujące:
  • obiekty tablicowe są zmienne
    • może być tablicą odniesień do niezmiennych typów, ale sama tablica jest zmienny
      • Znaczenie można ustawić te odniesienia do czegokolwiek chcesz
      • również prawdziwe dla macierzy primow
    • niezmienne tablica nie będzie praktyczny
  • Odniesienia do obiektów mogą być udostępniane
    • Jeśli obiekt jest zmienny, mutacja będzie postrzegane przez wszystkich tych odniesień

EDIT:

Nieco pokrewne: Why can't strings be mutable in Java and .NET?

+1

Dobra odpowiedź, również mogę zaproponować OP, aby przeczytać [to pytanie] (http://stackoverflow.com/questions/93091/why-cant-strings-be-mutable-in-java-and-net), aby uzyskać, dlaczego łańcuchy w języku Java są niezmienne. – bsiamionau

+0

@zvzdhk dodał link w odpowiedzi. Dzięki. –

+0

Czy wgląd w WTF sprawił, że tablice były niezmienne w języku C#? – DanteTheSmith

3

O ile pamiętam, pole w twojej tablicy odwoła się do innego ciągu

String[] array {"I","like","rain"}; 
array[2] = "sun" 

Twoja tablica może zostać zmieniona. same struny nie.

1

W Array każdy element jest po prostu wskaźnikiem do obiektu. Tak więc, gdy zrobisz coś podobnego

String one = "1"; 
String two = "2"; 
String three = "3"; 
String four = "4"; 
String[] myStringArray = {one, two, three}; 
myStringArray[2] = four; 

Następnie wskaźnik, który był na 3. elementu tablicy wskazuje teraz na czterech zamiast trzy.

Powiązane problemy