Java——final关键字,String为什么不可变

简介: 不知道大家有没有这样的疑问:我们在使用某些Java的类或者方法、属性(比如:String类)时,总是会发现前面有一个final进行修饰,那为什么要使用final呢?final在其中起到了什么作用呢?为什么String类不可变呢?且往下看

不知道大家有没有这样的疑问:我们在使用某些Java的类或者方法、属性(比如:String类)时,总是会发现前面有一个final进行修饰,那为什么要使用final呢?final在其中起到了什么作用呢?为什么String类不可变呢?且往下看


要想知道String类为什么不可变,我们得先了解了解这个final是什么。


final是什么?


英语角度:为形容词最终的意思,词根fin-表示界限、边界的意思,所以我们可以把final理解为final end,最终结束。表示这已经是最终结果了,不再有后续的变化了。这个单词在实际生活中一般也应用于像期末考试或是决赛这种场景


计算机角度:Java关键字,表示值不可变的变量


一、修饰类


使用final关键字修饰的类为最终类,不能被继承,也就是说不能有子类,并且类里面的属性和方法也默认都为final类型的,不能被重写。


如下图中的Person类被final关键字修饰了,当Student类想要继承Person类的时候,就报错“Cannot inherit from final‘person'”,不能继承最终类Person


9f197af6d835b752be051bd915ce7a8e.png


二、修饰变量


final修饰变量时,这个变量只能被赋值一次,赋值之后就无法改变了。若这个变量为基本数据类型时,使用final修饰的变量值不可变;若这个变量为引用数据类型时,使用final修饰的变量所指向的地址不变


42a06d9ea1df945d2a9bc4b28b083ba1.png


三、修饰方法


final修饰方法时,子类不能对这个方法进行重写,对方法锁定


94674a26d4ac68315f0cfab8d4a1b8cf.png


String为什么不可变?


在String类的底层源码,String类中有一个char数组是用于存储字符串的,并且这个char数组是用final修饰的,而且我们都知道数组一旦创建它的长度就是不可变的,并且被final修饰的引用类型一旦被赋值,也就是说指向某个对象之后,是不可以再修改它指向的空间的,所以String不可变的!


c5fe9cf70b83e5d2c76ff2eff5159a00.png

目录
打赏
0
0
0
0
18
分享
相关文章
|
4月前
|
《从头开始学java,一天一个知识点》之:字符串处理:String类的核心API
🌱 **《字符串处理:String类的核心API》一分钟速通!** 本文快速介绍Java中String类的3个高频API:`substring`、`indexOf`和`split`,并通过代码示例展示其用法。重点提示:`substring`的结束索引不包含该位置,`split`支持正则表达式。进一步探讨了String不可变性的高效设计原理及企业级编码规范,如避免使用`new String()`、拼接时使用`StringBuilder`等。最后通过互动解密游戏帮助读者巩固知识。 (上一篇:《多维数组与常见操作》 | 下一篇预告:《输入与输出:Scanner与System类》)
111 11
|
3月前
|
深入理解 Java 中的 instanceof 关键字
本文深入解析了 Java 中的 `instanceof` 关键字,探讨其在类型判断中的作用。作为二元操作符,`instanceof` 可用于检查对象是否为某类实例或实现特定接口,避免类型转换异常 (`ClassCastException`)。文章通过多态性下的类型判断、安全类型转换、接口实现检测及集合元素类型判定等实际应用场景,展示了 `instanceof` 的强大功能。掌握该关键字可提高代码健壮性,确保运行时类型安全。
133 0
|
5月前
|
Volatile关键字与Java原子性的迷宫之旅
通过合理使用 `volatile`和原子操作,可以在提升程序性能的同时,确保程序的正确性和线程安全性。希望本文能帮助您更好地理解和应用这些并发编程中的关键概念。
104 21
|
4月前
|
课时14:Java数据类型划分(初见String类)
课时14介绍Java数据类型,重点初见String类。通过三个范例讲解:观察String型变量、"+"操作符的使用问题及转义字符的应用。String不是基本数据类型而是引用类型,但使用方式类似基本类型。课程涵盖字符串连接、数学运算与字符串混合使用时的注意事项以及常用转义字符的用法。
107 9
课时8:Java程序基本概念(标识符与关键字)
课时8介绍Java程序中的标识符与关键字。标识符由字母、数字、下划线和美元符号组成,不能以数字开头且不能使用Java保留字。建议使用有意义的命名,如student_name、age。关键字是特殊标记,如蓝色字体所示。未使用的关键字有goto、const;特殊单词null、true、false不算关键字。JDK1.4后新增assert,JDK1.5后新增enum。
Java中的this关键字详解:深入理解与应用
本文深入解析了Java中`this`关键字的多种用法
1010 9
Java 并发编程——volatile 关键字解析
本文介绍了Java线程中的`volatile`关键字及其与`synchronized`锁的区别。`volatile`保证了变量的可见性和一定的有序性,但不能保证原子性。它通过内存屏障实现,避免指令重排序,确保线程间数据一致。相比`synchronized`,`volatile`性能更优,适用于简单状态标记和某些特定场景,如单例模式中的双重检查锁定。文中还解释了Java内存模型的基本概念,包括主内存、工作内存及并发编程中的原子性、可见性和有序性。
213 5
Java 并发编程——volatile 关键字解析
利用 Java 代码获取淘宝关键字 API 接口
在数字化商业时代,精准把握市场动态与消费者需求是企业成功的关键。淘宝作为中国最大的电商平台之一,其海量数据中蕴含丰富的商业洞察。本文介绍如何通过Java代码高效、合规地获取淘宝关键字API接口数据,帮助商家优化产品布局、制定营销策略。主要内容包括: 1. **淘宝关键字API的价值**:洞察用户需求、优化产品标题与详情、制定营销策略。 2. **获取API接口的步骤**:注册账号、申请权限、搭建Java开发环境、编写调用代码、解析响应数据。 3. **注意事项**:遵守法律法规与平台规则,处理API调用限制。 通过这些步骤,商家可以在激烈的市场竞争中脱颖而出。
Java 中的 String Pool 简介
本文介绍了 Java 中 String 对象及其存储机制 String Pool 的基本概念,包括字符串引用、构造方法中的内存分配、字符串文字与对象的区别、手工引用、垃圾清理、性能优化,以及 Java 9 中的压缩字符串特性。文章详细解析了 String 对象的初始化、内存使用及优化方法,帮助开发者更好地理解和使用 Java 中的字符串。
120 2
Java 中的 String Pool 简介

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等