Jaka jest różnica między w następujących sprawozdaniachString i końcowa
String name = "Tiger";
final String name ="Tiger";
Chociaż klasa String
jest final
klasa, dlaczego musimy utworzyć ciąg zmienną „stała” w finale?
Jaka jest różnica między w następujących sprawozdaniachString i końcowa
String name = "Tiger";
final String name ="Tiger";
Chociaż klasa String
jest final
klasa, dlaczego musimy utworzyć ciąg zmienną „stała” w finale?
final
w tym kontekście oznacza, że zmienną name
można przypisać tylko raz. Ponowne przypisanie do niego innego obiektu String
powoduje błąd kompilacji.
myślę źródłem zamieszania jest to, że kluczowe final
mogą być używane w różnych kontekstach:
Zobacz artykuł z Wikipedii na temat final in Java, gdzie znajdują się przykłady dotyczące każdego przypadku.
Pamiętaj, że "końcowe" to także bezpieczna publikacja do innych wątków (zobacz moją odpowiedź poniżej). –
Jesteś niezrozumiały niezmienny z ostatecznym.
Łańcuch, podobnie jak liczba całkowita i długa, jest klasą niezmienną, ponieważ dane wewnętrzne są chronione przed modyfikacją poprzez hermetyzację.
Jednak, jak powiedział Ayman, final odnosi się do wskaźnika do napisu.
Pamiętaj, że Java final keyword służy dwóm celom w tym przypadku:
Tak, semantyka finału jest bardzo ważna w aplikacjach współbieżności, a nie w zwykłych aplikacjach Java, ponieważ programiści Javy zazwyczaj przejmują zmienność. – egaga
„ostateczne "oznacza różne rzeczy w obu przypadkach.
Klasa java.lang.String jest ostateczna. oznacza to, że nie może dziedziczyć po nim.
zmienna«nazwa»jest ostateczna, co oznacza, że można” t Zmień go tak, aby wskazywał na inną instancję String, a więc nie finalną zmienną String nie jest stała, ponieważ można ją przeczytać w dwóch różnych czasach i uzyskać różne wartości.
Tak się składa, że obiekty napisów Java są również niezmienne. Oznacza to, że nie można modyfikować wartości reprezentowanej przez konkretny obiekt String. Porównaj to z tablicą - możesz zastąpić pierwszy element obiektu tablicy innym obiektem, ale nie możesz zastąpić pierwszego znaku obiektu String innym znakiem. Dlatego String.replace() zwraca nowy ciąg znaków - nie może modyfikować starego.
Jednym z powodów, dla których String jest ostateczny, jest zapobieganie przekazywaniu instancji podklasy String, która implementuje zachowanie zmienne, zamiast Stringa.
Ale czy można modyfikować konkretny obiekt i czy można przypisać inny obiekt do zmiennej, są zupełnie różne koncepcje. Jeden jest własnością obiektów String, a drugi jest właściwością zmiennych String, które są odwołaniami do obiektów String.
Spójrz na The final word on the final keyword.
String name = "scott";
name = "tiger"; // OK
final String gender = "male";
gender = "female"; // won't compile you cannot reassign gender cause it's final
Jeśli zmienna jest oznaczona jako końcowego wówczas wartość tej zmiennej nie może być zmieniany tj końcowego hasła stosowane ze zmienną sprawia, że jest stała. A jeśli spróbujesz zmienić wartość tej zmiennej w trakcie programu, kompilator da błąd.
UWAGA: Jeśli zaznaczysz zmienną typu referencyjnego jako ostateczne, że zmienna nie może odnosić się do jakiegokolwiek innego obiektu. Można jednak zmienić zawartość obiektu, ponieważ tylko samo odniesienie jest ostateczne.
ŹRÓDŁO: Final Keyword in Java
Jest to odniesienie do łańcucha, który jest wykonany ostateczny tutaj, a nie sam ciąg. –