社区
Java EE
帖子详情
Java中String类 用final修饰的原因
一杯就醉1929
2016-04-05 10:06:03
Java中String类 用final修饰的原因?
...全文
479
4
打赏
收藏
Java中String类 用final修饰的原因
Java中String类 用final修饰的原因?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
执笔记忆的空白
2016-04-06
打赏
举报
回复
堆空间里面有个字符串池,里面都是字符串常量,也就是说字符串的+ , 其实是两个引用的+ ,与字符串池本身常量无关
howsun_zh
2016-04-06
打赏
举报
回复
Java没有字符串这种基本类型,它是使用char[]数组包装而成,对象生成那一刻,内部数据就确定了;另外,它利用编译器重载了“+”、“==”操作符,在虚拟机里与内部常量池做了映射,可见内部非常复杂。因此,为了保证这种数据结构完整性,不被修改和其它操作(例如子类、反射),因此使用final关键字加于限制。
飏飏一蝶
2016-04-06
打赏
举报
回复
如何创建一个不可变类: 1、.所有成员都是private .2、不提供对成员的改变方法,例如:setXXXX 3、确保所有的方法不会被重载。手段有两种:使用final Class(强不可变类),或者将所有类方法加上final(弱不可变类)。 4、如果某一个类成员不是原始变量(primitive)或者不可变类,必须通过在成员初始化(in)或者get方法(out)时通过深度clone方法,来确保类的不可变。 这就是String需要final修饰的原因。
sun295508987
2016-04-06
打赏
举报
回复
不希望被修改呗
Java
中
的
String
类
为什么用
final
修饰
?
相信很多小伙伴在面试的时候都被问到过“
Java
中
的
String
类
为什么用
final
修饰
?”这个问题,今天带大家一探究竟,希望小伙伴们在之后面试
中
遇到这个问题时,能够很顺利的回答出来,顺利斩获高薪offer。
String
类
用
final
修饰
一方面保证在多线程环境下的线程安全,另一方面实现字符串常量池节约内存和提升性能。
String
为什么被
final
修饰
首先,被
final
修饰
的变量,无论是
类
属性、对象属性、形参还是局部变量,都需要进行初始化操作。而
String
被
final
修饰
主要由于两个方面:安全性和效率 一)效率:使用字符串池
final
修饰
的
String
,代表这个
类
不能被继承,而
String
是一个char
类
型的数组,证明它是不可更改的,但这也仅仅是引用地址不可改,再加上被private
修饰
,证明数组本身也不会改变。只有当字符串本身也不会变的时候才可以使用字符串池,这样节省空间 二)安全性:
String
类
被
final
修饰
不能被继承,无法修改,在多线
Java
中
的
final
变量
final
修饰
变量
final
修饰
方法
final
修饰
类
final
和
String
的关系
在开发的过程
中
,经常会使用
String
类
来处理字符串相关的数据,但今天去看
String
源代码时,发现这个
类
是用
final
修饰
的,于是,决定去探究inal关键字。
final
关键字可以修改
类
,方法和属性,但这个关键字的作用是什么?文章可以带你了解。...
Java
中
的
final
修饰
符用法大全
一,
final
修饰
类
fianl
修饰
符如果
修饰
类
的话就代表该
类
不可以被继承,即不允许被继承; public
final
class NoExtends{} 如此,NoExtends
类
就不可以被继承了,即下面的代码就会报错 public calss ExtendsTest extends NoExtends{} 由于NoExtends
类
有了
final
的
修饰
而无法被调用。
类
似的比如
Java
中
的
String
类
也是
final
修饰
的,也即
String
类
不允许被继承不允许扩展其方法或属性。 二,
final
修饰
成员变
常见的
final
修饰
的
类
final
可以
修饰
类
、成员变量和成员方法 被
final
修饰
的
类
,不能被继承 被
final
修饰
的方法,不能被重写 被
final
修饰
的成员变量,不能被重新赋值(接口
中
的成员变量默认为public static
final
修饰
的静态常量)
String
类
为
final
修饰
类
,不能被继承 常见的
final
修饰
类
: 1、
java
.lang包
中
包装
类
:Boolean,Character,Short,Integer,Long,Float,Double,Byte,Void(八大
类
型的包装
类
型加一个void) 字符串
Java EE
67,515
社区成员
225,878
社区内容
发帖
与我相关
我的任务
Java EE
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
复制链接
扫一扫
分享
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章