1、String为什么是final的

一、首先,我们得明白,final的定义。

1、final类作为java关键词, 可以修饰类、方法和变量,用于表达被它所修饰的内容一旦赋值就不可改变
2、final可修饰的变量可以分为静态变量(static修饰,也称类变量)以及实例变量(成员变量及局部变量)

a、给静态变量赋值有且只有2个时机:声明变量、静态代码块(静态变量赋值图)
b、给成员变量赋值有且只有3个时机:声明变量、非静态初始化代码块、构造器(成员变量赋值图)
c、局部变量只能手动初始化,如果没有初始化,有且只有一次机会进行赋值(局部变量赋值图)。
d、引用变量被final修饰之后,引用地址不变,指向对象的内容是可变的(final修饰引用数据变量图)
静态变量赋值图.png
成员变量赋值图.png
局部变量赋值图.png
final修饰引用数据变量.png

3、当一个类被final修饰时,表名该类是不能被子类继承的。
4、父类的final方法是不能够被子类重写的,final方法是可以被重载的
5、当final变量是基本数据及String类型时,如果编译期间知道它的确切值,则编译器会把它当做常量(如下图)

image.png

java是值传递,这点在看有关final参数引用资料中提及了,这个看的有点模糊,以后研究

有关final的深入,还有多线程并发的情况,具体表现为final域重排序规则,暂时这个还没看懂,搁置。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容