String类为啥是final的?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了String类为啥是final的?相关的知识,希望对你有一定的参考价值。

参考技术A

1.为了实现字符串池;
2.为了线程安全;
3.为了实现String可以创建HashCode不可变性;

1.final修饰类,被final修饰的类不能被继承,即它不能拥有自己的子类,否在会在编译期间报错;
2.final修饰方法,被final修饰的方法不能被重写;
3.final修饰变量,final修饰的变量,无论是类属性、对象属性、形参还是局部变量,都需要进行初始化操作。

查看JDK String的源码

final修饰的String,代表了String的不可继承性,final修饰的char[]代表了被存储的数据不可更改性。但是:虽然final代表了不可变,但仅仅是引用地址不可变,并不代表了数组本身不会变,请看下面图片。

1.只有当字符串是不可变的, 字符串池 才有可能实现。字符串池的实现可以在运行时节约很多heap空间,因为不同的字符串变量都指向池中的同一个字符串。但如果字符串是可变的,那么String interning将不能实现,因为这样的话,如果变量改变了它的值,那么其它指向这个值的变量的值也会一起改变。

以上是关于String类为啥是final的?的主要内容,如果未能解决你的问题,请参考以下文章

java基础复习:final,static,以及String类

Java String类为什么是final的?

String类可以被继承吗?我们来聊聊final关键字!

为什么jdk中把String类设计成final

String类为什么是final类型?

String类为什么是final类型?