String类的final原因

本文探讨了字符串不可变性在编程中的重要性,特别是在多线程环境和方法调用中,避免了线程安全问题和意外的数据修改。通过具体示例说明了不可变性如何简化代码实现和维护。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作者:知乎用户
链接:https://www.zhihu.com/question/31345592/answer/114259286
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

存在即合理。所以我们想想不变比可变好在哪里?
1、线程安全。基本类型传值对象传引用,记住这一点。既然传引用,两个变量就有可能指向同一个String。而在String可变情况下,我要是通过一个变量来更改String,那么另一个变量取到的String也就变了!为什么?因为两个变量指向同个String。试想在多线程里,这会是多么可怕的一件事情:一个线程正在处理一个String,发现自己处理的String竟然变了。惊了?!shenmegui?!而且,因为多线程由CPU调度的关系,你难以确定到底这个可变的String会变成shenmegui。啥?你说封装在线程安全的类里?直接让他不可变多省事。
2、小明写了个方法:

String method(String origin){        
origin += origin.substring(2);        
return origin;
}

然后他将同个字符串分别传入两次并打印:
Shenmeguienmegui
Shenmeguienmeguienmeguienmegui
小明惊了?!随即他发现,因为String是可变的,而第一次调用就已经改变了原来的字符串。所以……

String method(String origin){        
String result = origin.clone();        
result += result.substring(2);        
return result;
}

一边骂着Moon的工程师干嘛不让字符串不可变,小明终于得到了他要的输出:Shenmeguienmegui
Shenmeguienmegui

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值