美文网首页
String为什么是final的

String为什么是final的

作者: 小丸子的呆地 | 来源:发表于2021-07-17 18:27 被阅读0次

什么是final,参看我的上一篇文章:Java关键字之final

Java中我们最常用的类String被final修饰,final修饰类,代表了而这个类不允许被继承,这个类就是一个终结。

为什么String类要被定义为final的呢?

因为String类要保证他的实例不可变,不可变和被final修饰其实是两件事。
String为了保证他的实例不可变做了三件事:

  • 内部成员变量char[]被final修饰,char[] 引用地址不可变。
  • 所有对外提供的方法,都不会去尝试修改char[]内部的元素。这就是封装的好处。
  • String类被final修饰,类不可以被继承。规避了有坏人想尝试通过继承重写来破坏String内部的数据。

所以String类被定义为final最终的目的是为了保证String类实例不可变。

为什么String类实例要设定为不可变?

  • 字符串缓冲池,使用享元模式,减少String对象的产生,而享元模式的弊端就是对象的内部状态不可变。
  • 使用安全,String是我们程序中最最常用的对象,不可变规避了直接在堆中直接改变对象内容,除非我们主动修改引用地址,否则我们将String传递进任何方法中,他都不会改变。防止一不小心就在其他函数内被更改了。
  • 线程安全,并发使用String时,不需要再去考虑他的线程安全问题。
  • 性能,由于String一出生或一初始化就不可变,所以一个String的hashcode是固定的不变的,可以只计算一次,并且String是最适合作为hash表结构中Key的类。
  • 设定为不可变之后,String就更贴近一个基本类型了,这可能也是JDK开发者的期望。

相关文章

  • 第五讲 String,StringBuffer,StringBu

    1.String类型为什么用final修饰? String是典型的Immutable(不可变)类,final修饰意...

  • Java面试指南

    01、String 为什么是 final   1、String 类是一个不可变类,被 final 修改的类不能被继...

  • Java面试-基础问题整理

    1. String类为什么是final的。 答:申明为final的类是不能被继承的,这防止了String类被子类修...

  • 用Redis做QPS限制

    通过set(final String key, final String value, final String ...

  • 基础知识

    1、String类能不能被继承?为什么?答:不能因为string类是被final修饰的类,final修饰过的类不能...

  • 大厂面试题1

    基础篇 String为什么要设计成Final String StringBuffer StringBulider的...

  • String被final修饰

    源码: 为什么String被final修饰? String str = "test"; 给String变量对象赋值...

  • 2021最新Java面试题(基础)

    1、String能被继承吗?为什么? 不可以,因为String类有final修饰符,而final修饰的类是不能被继...

  • Java常见面试题

    1.String能被继承吗?为什么? 不可以,因为String类有final修饰符,而final修饰的类是不能被继...

  • String为什么是final的

    什么是final,参看我的上一篇文章:Java关键字之final[https://www.jianshu.com/...

网友评论

      本文标题:String为什么是final的

      本文链接:https://www.haomeiwen.com/subject/lbewpltx.html