la benifit di rendere stringa come immutabile è stato per la funzione di sicurezza. Leggi sotto
Perché String è stato reso immutabile in Java?
Tuttavia, anche le prestazioni sono un motivo (presupponendo che si sia già a conoscenza del pool String interno gestito per assicurarsi che lo stesso oggetto String venga utilizzato più volte senza doverlo creare/ri-reclamare più volte), ma il motivo principale per cui String è stato reso immutabile in Java è "Sicurezza". Sorpreso? Capiamo perché.
Supponiamo che sia necessario aprire un file sicuro che richiede agli utenti di autenticarsi. Diciamo che ci sono due utenti chiamati 'user1' e 'user2' e hanno i propri file password 'password1' e 'password2', rispettivamente. Ovviamente 'utente2' non dovrebbe avere accesso al file 'password1'.
Come sappiamo, i nomi file in Java sono specificati utilizzando Stringhe. Anche se si crea un oggetto 'File', si passa il nome del file solo come una stringa e tale stringa viene mantenuta all'interno dell'oggetto File come uno dei suoi membri.
Aveva String stato mutevole, 'user1' avrebbe potuto effettuato l'accesso con le proprie credenziali e quindi in qualche modo sarebbe riuscito a cambiare il nome del suo nome di file password (un oggetto String) da 'password1' a 'password2' prima JVM effettivamente posti la chiamata di sistema del sistema operativo nativo per aprire il file. Ciò avrebbe permesso a 'utente1' di aprire il file di password di user2. Comprensibilmente ciò avrebbe comportato un grosso difetto di sicurezza in Java. Capisco che ce ne siano così tanti che potrebbero essere qui, ma sicuramente conveniresti che avrebbe aperto una porta per consentire agli sviluppatori di compromettere la sicurezza di molte risorse intenzionalmente o non intenzionalmente.
Con String che è immutabile, JVM può essere sicuro che il membro di istanza del file del file oggetto corrispondente continui a puntare allo stesso oggetto String "filename" invariato. Il membro dell'istanza 'filename' che è un 'final' nella classe File può comunque non essere modificato in modo da puntare a qualsiasi altro oggetto String specificando qualsiasi altro file rispetto a quello previsto (cioè, quello che è stato utilizzato per creare l'oggetto File).
fonte
2012-01-10 09:46:29
Pensa a cosa farai se vuoi creare un corso immutabile da solo. – Azodious
Beh, la mia domanda è: ci sono così tante altre classi immutabili in java, quindi perché i designer Java hanno deciso di creare un pool di stringhe. È una funzione che aiuta le prestazioni o è la necessità di Java Design? –