当前位置:网站首页>为什么字符串使用final关键字
为什么字符串使用final关键字
2022-07-29 13:41:00 【xiaokaikaa】
final 的定义
1.final关键字可以用来修饰类,方法,变量。
2.修饰类时,该类不可以被继承;
3.修饰方法时,该方法不可以被子类重写;
4.修饰变量时,该变量为常量,需要进行初始化赋值操作,且只能被赋值一次,赋值后不可再改变。
虽然引用变量被final修饰之后,虽然不能再指向其他对象,但是它指向的对象的内容是可变的。stack栈里的引用地址不可变,但heap堆里的数据却是可以改变的。
String为什么不可变
在String源码里,除了String类被final修饰外,value数组也被final修饰,String类本质上就是一个不可变的char数组。
因为被final修饰后,引用地址虽然不可变,但数据本身却是可变的,同理,value数组里的数据也可能会被修改。但由于value数组本身是private私有访问,且String类本身也被final修饰,不能被继承,从而使String不能被改变。
String类被设计成final后,因为不可变,在多线程环境下,线程安全。
安全性高,比如,数据库的用户名、密码都是以字符串的形式传入来获得数据库的连接,或者在socket编程中,主机名和端口都是以字符串的形式传入。因为String对象是不可变的,所以它的值是不可改变的,保证了安全性。
总结:
1支持字符串常量池
2线程安全
3保证hash code的唯一性
4安全性
边栏推荐
- 从KEIL仿真界面导出数据的技巧
- 通过二维顺序表实现杨辉三角
- 2022年了!还在用定时器实现动画?赶紧试试requestAnimationFrame吧!
- 【LeetCode】Day106-单词规律
- EA&UML日拱一卒-活动图::CallOperationAction(续)
- 进程间通信 --- system V三种通信方式(图文案例讲解)
- 升级 MDK 5.37 后的问题处理: AC6编译选项, printf, 重启失效等
- 程序员入门的第一个程序,打印输出 “ HelloWorld “
- How much do you know about futures contracts
- The most classic special effects scenes in 25 years
猜你喜欢
随机推荐
BGP联邦综合实验
R错误:缺少值不允许写在下面的作业的数据帧
升级 MDK 5.37 后的问题处理: AC6编译选项, printf, 重启失效等
程序员是职业病高发群体,别天真的以为只有秃头那么简单,才不是呢。
Gdb debugging common concepts finishing
线程池拒绝策略详解
十种实现延迟任务的方案
AI全流程开发难题破解之钥
带你了解一下PHP搭建的电商商城系统
蚂蚁三面滑铁卢!遭分布式截胡,靠这些笔记潜修30天,挺进京东
[局域网劫持]如何搞懵蹭网的同学-详细过程
【JS面试题】面试官问我:遍历一个数组用 for 和 forEach 哪个更快?
【MySQL】ERROR 2002 (HY000): Can‘t connect to local MySQL server through socket ‘/tmp/mysql.sock‘
3555. 二叉树
Redis-NoSql
Nine kinds of way, teach you to read the resources files in the directory path
Children's programming electronics (graphical programming Scratch secondary level exam parsing (choice) in June 2022
human pose estimation-DEKR2021CVPR
app小程序开发的营销优势有什么?
Vscode搭建ESP32-C3开发环境









