为什么String要⽤final修饰
String被final修饰
从 String 类的源码我们可以看出 String 是被 final 修饰的不可继承类,源码如下:
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence { ...... }
那这样设计有什么好处呢?
Java 语⾔之⽗ James Gosling 的回答是,他会更倾向于使⽤
final,因为它能够缓存结果,当你在传参时不需要考虑谁会修改它的值;如果是可变类的话,则有可能需要重新拷贝出来⼀个新值进⾏传参,这样在性能上就会有⼀定的损失。
James Gosling 还说:迫使 String
类设计成不可变的另⼀个原因是安全,当你在调⽤其他⽅法时,⽐如调⽤⼀些系统级操作指令之前,可能会有⼀系列校验,如果是可变类的话,可能在你校验过后,它的内部的值⼜被改变了,这样有可能会引起
严重的系统崩溃问题,这是迫使
String 类设计成不可变类的⼀个重要原因。
总结来说,使⽤ final 修饰的第⼀个好处是安全;第⼆个好处是⾼效,以 JVM 中的字符串常量池来举例,如下两个变量:
String s1 = "java";
String s2 = "java";
只有字符串是不可变时,我们才能实现字符串常量池,字符串常量池可以为我们缓存字符串,提⾼程序的运⾏效率,如下图所⽰:
试想⼀下如果 String 是可变的,那当 s1 的值修改之后,s2 的值也跟着改变了,这样就和我们预期的结果不相符了,因此也就没有办法实现字符串常量池的功能了。
>字符串常量池存的是实例还是引用?

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。