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