String的对象内容不可更改
但究竟是为什么要这么做呢?
?
如果考虑是如何将String的对象变得immutable,可以查看javasrc,因为String类的成员变量value,一个char数组,是final类型,一旦初始化后将无法更改。
?
多数的时候解释为,考虑到执行效率上,因为如果一个String实例创建后,比如,”abc”,可以被多个String对象引用,以减少创建的对时间和资源的消耗(可以参考这里获取一些有关String pool的信息),不过今天看到另一种说法,是安全?!
?
假设,有两个用户,user1,user2,分别对应两个属于其个人的隐私文件,file1,file2。两人只能访问其对应的文件,即,user1对应file1,user2对应file2。
?
如果String是可以更改的,那么也就是File类型引用的Stringpath就是一个可以更改的值。试想,user1登陆以后,在试图打开其个人隐私文件之前,这个path对象的value被更改了,改成了file2,那user1在试图开启其个人隐私文件时,看到的就是file2的内容。
?
这只是对如果String是可更改的简单假象,更多的复杂的场景可以考虑,比如多线程的操作。