logo

Proč je řetězec neměnný nebo konečný v Javě

V objektově orientovaném programování, neměnný řetězec nebo předměty které po vytvoření nelze upravit. Ale můžeme změnit pouze odkaz na objekt. Omezujeme na změnu samotného objektu. The Řetězec je neměnný v Jáva kvůli zabezpečení, synchronizaci a souběžnosti, ukládání do mezipaměti a načítání tříd. Důvodem definitivní struny je zničit neměnnost a nedovolit ostatním, aby ji prodlužovali.

Objekty String jsou ukládány do mezipaměti ve fondu String a to vytváří Řetězec neměnný . Řetězcové literály uložené v mezipaměti jsou přístupné více klientům. Vždy tedy existuje riziko, kdy akce provedená jedním klientem ovlivní všechny ostatní klienty. Pokud například jeden klient provede akci a změní hodnotu řetězce z Pressure (Tlak) na PRESSURE (Tlak), přečtou tuto hodnotu také všichni zbývající klienti. Z důvodu výkonu bylo ukládání objektů String do mezipaměti důležité, takže abychom toto riziko odstranili, musíme vytvořit String Immutable.

Proč je řetězec neměnný nebo konečný v Javě

Toto jsou některé další důvody, proč je řetězec neměnný:

  • Fond řetězců nemůže být možný, pokud řetězec není v Javě neměnný. Tím se ušetří spousta místa na hromadě JRE . Na stejnou řetězcovou proměnnou může odkazovat více než jedna řetězcová proměnná ve fondu. Vložení řetězce také nemůže být možné, pokud by řetězec nebyl neměnný.
  • Pokud neuděláme řetězec neměnný, bude to představovat vážnou bezpečnostní hrozbu pro aplikaci. Například databázová uživatelská jména, hesla jsou předávána jako řetězce pro příjem databázových připojení. The programování zásuvky popisy hostitele a portu jsou také předány jako řetězce. Řetězec je neměnný, takže jeho hodnotu nelze změnit. Pokud řetězec nezůstane neměnný, může kterýkoli hacker způsobit bezpečnostní problém v aplikaci změnou referenční hodnoty.
  • Řetězec je bezpečný pro multithreading kvůli jeho neměnnosti. Různá vlákna mohou přistupovat k jedné „instanci řetězce“. Odstraňuje synchronizaci pro bezpečnost vláken, protože implicitně vytváříme řetězce bezpečné pro vlákna.
  • Immutability poskytuje jistotu načtení správné třídy pomocí Classloaderu. Předpokládejme například, že máme instanci, kde se pokoušíme načíst třídu java.sql.Connection, ale změny v odkazované hodnotě na třídu myhacked.Connection způsobí v naší databázi nežádoucí věci.

Pojďme pochopit koncept neměnného na příkladu.

ImmutableString.java

 import java.util.*; class ImmutableString{ public static void main(String args[]){ String NewString = 'Hello'; NewString.concat('World'); System.out.println(NewString); } } 

Výstup:

Proč je řetězec neměnný nebo konečný v Javě

Popis: Výše uvedený příklad můžeme pochopit pomocí následujícího diagramu:

Proč je řetězec neměnný nebo konečný v Javě

Ve fondu konstant řetězců je Ahoj zůstane nezměněn a vytvoří se nový objekt řetězce s Ahoj světe . Ukazuje, že řetězce jsou neměnné. Referenční proměnná ukazuje na Ahoj ne k Ahoj světe.

Pokud chceme, aby se odkazovalo na Ahoj světe , musíme ji explicitně přiřadit k této proměnné. Například:

 import java.util.*; class ImmutableString{ public static void main(String args[]){ String NewString = 'Hello'; NewString = NewString.concat('World'); System.out.println(NewString); } } 

Výstup:

Proč je řetězec neměnný nebo konečný v Javě