面试题:String为什么要用final修饰,有什么好处

您所在的位置:网站首页 良师益友用什么修饰 面试题:String为什么要用final修饰,有什么好处

面试题:String为什么要用final修饰,有什么好处

2024-07-17 22:42| 来源: 网络整理| 查看: 265

1. 首先回答为什么

为了保证String对象的不可变

2. 那么final是怎么保证String对象的不可变呢?

想要回答这个问题,得先知道final的作用:

final修饰的类不可被继承final修饰的引用在初始化后不可重新赋值final修饰的方法不可重写

接着要明确String的底层是什么,在jdk8中,String的底层是一个char数组,在String类源码中,有一个成员变量value,它是一个char数组引用,指向了存储Sting对象内容的char数组,value引用使用了final修饰: 在这里插入图片描述 使用了final引用修饰使得value引用指向的char数组对象不会被改变,但这还不能保证String对象的不可变,虽然对象不变,但是数组的元素却还是可以改变的,对char数组元素的改变同样会使得String对象改变,我们可以用一段代码来测试一下

class Main{ public static void main(String[] args) { //首先声明一个final修饰的引用,并初始化 final char[] value = {'1','2','3','4'}; //改变前 System.out.println(value[0]); //改变下标为0的字符 value[0] = 'a'; //改变后 System.out.println(value[0]); System.out.println(); } }

执行结果如下: 在这里插入图片描述 可以看到虽然value被final修饰,但是数组元素还是可以改变

因此,为了保证String对象内容的不可变,String类的设计师们在实现String提供的各种方法时都避免了对value数组元素的改变,举个例子,下面是substring方法的实现源码

public String substring(int beginIndex) { if (beginIndex


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3