Why String is immutable in Java ?--reference
1. Requirement of String Pool String pool (String intern pool) is a special storage area in?. When a string is created and if the string already exists in the pool,the reference of the existing string will be returned,instead of creating a new object and returning its reference. The following code will create only one string object in the heap. |
Here is how it looks:
If string is not immutable,changing the string with one reference will lead to the wrong value for the other references.
2. Caching Hashcode
The hashcode of string is frequently used in Java. For example,in a HashMap. Being immutable guarantees that hashcode will always the same,so that it can be cashed without worrying the changes.That means,there is no need to calculate hashcode every time it is used. This is more efficient.
In String class,it has the following code:
3. Facilitating the Use of Other Objects
To make this concrete,consider the following program:
In this example,if?String
?is mutable,it's value can be changed which would violate the design of set (set contains unduplicated elements). This example is designed for simplicity sake,in the real?String
class there is no?value
?field.
4. Security
String is widely used as parameter for many java classes,e.g. network connection,opening files,etc. Were String not immutable,a connection or file would be changed and lead to serious security threat. The method thought it was connecting to one machine,but was not. Mutable strings could cause security problem in Reflection too,as the parameters are strings.
Here is a code example:
5. Immutable objects are naturally thread-safe
Because immutable objects can not be changed,they can be shared among multiple threads freely. This eliminate the requirements of doing synchronization.
In summary,?String
?is designed to be immutable for the sake of efficiency and security. This is also the reason why immutable classes are preferred in general.
reference from:http://www.programcreek.com/2013/04/why-string-is-immutable-in-java/
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!