为什么String字符串是final的

String使用final修饰的原因

final修饰符的作用

望文生义,final意为“最终的,最后的”,我理解为“不能被改变的”,它可以修饰类、变量和方法。

所以我是否可以理解为被它所修饰的类、变量和方法都不能被改变呢?答案是”是“,因为有以下约束条件的存在:

1.final修饰类,代表该类不能被继承,也就是不能有子类。
2.final修饰方法,代表该方法不能被重写。
3.final修饰变量,final修饰的变量,无论是类属性(类属性可以理解为一个将一个类作为另一个类的属性)、对象属性形参还是局部变量,都需要进行初始化操作。

所以用final修饰String:主要是为了以下两点:

1.安全性:由于String类不能被继承,所以就不会被修改,这就避免了因为继承引起的安全隐患(比如,String中有很多方法是通过调用操作系统的本地Api,如果String不是final,可以被重写,那么可能会造成一些系统错误)
2.效率:java的字符串都存放在字符串常量池中,在创建一个新的字符串时,如果常量池中已经有这个字符串了,则返回这个字符串的引用,不会新建一个。效率会大大提高。如果String不是final的,当修改一个字符串时,如果有多个引用指向该字符串,那么其他引用的值也会发生变化。

1.为了实现字符串池,只有字符串不变时,才能实现常量池

2.为了线程安全;使用 private final char[] values 保证了String的引用和值都不变

3.为了实现String可以创建HashCode不可变性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值