En la programació orientada a objectes, el cadena o objectes immutables que no es pot modificar un cop creat. Però només podem canviar la referència a l'objecte. Ens limitem a canviar l'objecte en si. El La cadena és immutable en Java a causa de la seguretat, la sincronització i la concurrència, la memòria cau i la càrrega de classes. La raó de fer la corda definitiva és destruir la immutabilitat i no permetre que altres l'estenguin.
int una cadena java
Els objectes String s'emmagatzemen a la memòria cau a l'agrupació String i fa que Corda immutable . Diversos clients accedeixen als literals String de la memòria cau. Per tant, sempre hi ha un risc, on l'acció realitzada per un client afecta tots els altres clients. Per exemple, si un client realitza una acció i canvia el valor de la cadena de Pression a PRESSURE, tots els clients restants també llegiran aquest valor. Per motius de rendiment, la memòria cau dels objectes String era important, de manera que per eliminar aquest risc, hem de fer que String sigui immutable.
Aquestes són algunes raons més per fer que String sigui immutable:
- L'agrupació de cadenes no pot ser possible si String no és immutable a Java. S'estalvia molt d'espai de pila JRE . La mateixa variable de cadena es pot referir a més d'una variable de cadena del grup. La internació de cadenes tampoc pot ser possible si la cadena no fos immutable.
- Si no fem la cadena immutable, suposarà una greu amenaça per a la seguretat de l'aplicació. Per exemple, els noms d'usuari de la base de dades i les contrasenyes es passen com a cadenes per rebre connexions a la base de dades. El programació de socket Les descripcions d'amfitrió i port també es passen com a cadenes. La cadena és immutable, de manera que el seu valor no es pot canviar. Si la cadena no es manté immutable, qualsevol pirata informàtic pot causar un problema de seguretat a l'aplicació canviant el valor de referència.
- La cadena és segura per a multithreading a causa de la seva immutabilitat. Diferents fils poden accedir a una única 'instància de cadena'. Elimina la sincronització per a la seguretat del fil perquè fem que les cadenes siguin segures de manera implícita.
- La immutabilitat dóna la seguretat de carregar la classe correcta per Classloader. Per exemple, suposem que tenim una instància en què intentem carregar la classe java.sql.Connection però els canvis en el valor de referència a la classe myhacked.Connection fan coses no desitjades a la nostra base de dades.
Entenem el concepte d'immutable a través d'un exemple.
ImmutableString.java
import java.util.*; class ImmutableString{ public static void main(String args[]){ String NewString = 'Hello'; NewString.concat('World'); System.out.println(NewString); } }
Sortida:
Descripció: Podem entendre l'exemple anterior amb l'ajuda del diagrama següent:
A la piscina constant de cordes, el Hola roman sense canvis i es crea un objecte de cadena nou Hola món . Mostra que les cordes són immutables. La variable de referència apunta a Hola no a la Hola món.
Si volem que es refereix al Hola món , l'hem d'assignar explícitament a aquesta variable. Per exemple:
import java.util.*; class ImmutableString{ public static void main(String args[]){ String NewString = 'Hello'; NewString = NewString.concat('World'); System.out.println(NewString); } }
Sortida: