1.不可改变---执行效率高

2.因为String这个对象基本是被所有的类对象都会使用的到了,如果可以被复写,就会很乱套,比如map的key ,如果是一个string为key的话,String如果可以改变的话,你想想后果

3.执行效率可以这么解释,面向对象有一个多态的性质,如果可以改变,就可以被复写,子类如果复写了某个方法,虚函数表就被用上了;如果是final型的,jvm就直接去用了,根本不用去虚函数表里面找

           ----------只要声明成final ,JVM才不用对相关方法在虚函数表中查询,而直接定位到string类的相关方法上,提高了执行效率。基础类以保证执行效率为第一要素。

4.从设计思想来解释这个  为什么要弄成final类型的



一致性。无论是人类语言,还是机器语言,都有它们的约束规则。



     Long, Double, Integer 之类的全都是final的  程序的基石是不可被改变的

5.也可以从安全的角度来解释定义成final,



6.String被广泛使用,避免多态的影响,或者他提供的函数已经非常的丰富了,你再去扩展有点多余


还有一个大家都知道,就是在并发场景下,多个线程同时读一个资源,是不会引发竟态条件的。只有对资源做写操作才有危险。不可变对象不能被写,所以线程安全。

不可变性支持字符串常量池


最后别忘了 String 另外一个字符串常量池的属性。像下面这样字符串 one 和 two 都用字面量 "something" 赋值。它们其实都指向同一个内存地址。





1. String one = "someString";  
2. String two = "someString";



java中final用什么场所 java使用final的好处_字符串


这样在大量使用字符串的情况下,可以节省内存空间,提高效率。但之所以能实现这个特性,String的不可变性是最基本的一个必要条件。要是内存里字符串内容能改来改去,这么做就完全没有意义了。