String 为什么是不可变得的,安全的。

1,String是通过缓存池共享的,你定义一个String,当下次你再要使用这个String的时候就直接从缓存池中取出来,而不需要重新定义。作为共享资源,那么需要他是final的,即其他用户不能随意修改内容(修改会影响其他用户),用户只能读共享读。
2,String 类不可变的另一个原因可能是由于Hashmap,对于键值而言,不可变性是其一个重要性质。我们根据String内容计算哈希码,比如我们存入时的内容是"Hello",然后我们中间更改内容为"World",那么我们要查找"World "时,我们会计算World的哈希码,然后去找对应位置的内容,但是对应位置没有内容,因为"World"这个内容我们存在原来"Hello"哈希码对应的位置。这样就会导致程序出错。
3,由于 String 是不可变的,它可以安全地共享许多线程,这对于多线程编程非常重要. 并且避免了 Java 中的同步问题,不变性也使得String 实例在 Java 中是线程安全的,这意味着你不需要从外部同步 String 操作。关于 String 的另一个要点是由截取字符串 SubString 引起的内存泄漏,这不是与线程相关的问题,但也是需要注意的。
4,由于String已经广泛应用于Java类的参数,所以如果String时可变的话,将导致严重的安全隐患,比如文件访问权限,用户可以将某个自己不具有访问权限的文档名称更改为有访问权限的名称,这样就可以取得文件的访问权限,你想一想,是不是很刺激。

如果还有其他的原因的考虑,我在后面会继续补充

posted @ 2020-12-06 19:15  大海川  阅读(525)  评论(0)    收藏  举报