专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

Javase(String类为什么是final)

1、什么是final

final意思是,最终,如果一个类不想被子类继承,或者不想被子类的方法重写,可以用final修饰此类,final类中的方法默认也会是final类型的。final关键字可以修饰类类的成员变量、类的成员方法、局部变量

(1)被final关键字修饰后的变量(成员变量、局部变量)只能赋值一次,final修饰后的变量只能在这个类的内部使用,不能在类的外部直接使用

(2)引用类型的变量值为对象地址值,赋值之后,地址不能再更改,但是地址内的对象属性值可以修改

(3)final 标记的成员变量必须在声明的同时或在该类的构造方法中显式赋值:

2、String类特点

(1)String类的源码:

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
    /** The value is used for character storage. */
    private final char value[];

    /** Cache the hash code for the string */
    private int hash; // Default to 0

    /** use serialVersionUID from JDK 1.0.2 for interoperability */
    private static final long serialVersionUID = -6849794470754667710L;

(2)创建一个类继承String类:

39_1.png

继承String类的时候报错,这是因为String类已经被声明为final是不能被子类继承的。

3、String类为什么被声明为final的?

(1)安全性:

String类不能被继承,就没有办法修改该类,所以保证了该类的安全性。

(2)效率问题:

如果在每次使用String类的时候为了保证安全性都用final修饰,会比较麻烦降低效率,直接在类内部声明,提高了效率。

(3)为了实现字符串常量池:

创建字符串时,如果该字符串已经存在于池中,则将返回现有字符串的引用,而不是创建新对象(节省内存)。多个String变量引用指向同一个内地地址,如果字符串是可变的,用一个引用更改字符串将导致其他引用的值错误,这样的话字符串常量池将不能实现。

(4)为了线程安全:

因为字符串是不可变的,所以是多线程安全的,同一个字符串实例可以被多个线程共享。

(5)为了实现String可以创建HashCode的不可变性:

因为字符串是不可变的,所以在它创建的时候HashCode就被缓存了,不需要重新计算。字符串的处理速度要快过其它键的对象,这也是Map的key用String最多的原因。

文章永久链接:https://tech.souyunku.com/22855

未经允许不得转载:搜云库技术团队 » Javase(String类为什么是final)

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们