java基础之string

本文深入探讨了Java中String为何被设计为不可变常量,主要从效率和安全性的角度出发。不可变性允许字符串共享,提高性能,并在多线程环境下提供更好的安全性。String的不变性通过final和private修饰的字符数组实现,但通过反射仍可能改变其内部引用。此外,文章还提及了Integer等基本类型的不可变性及其好处。
摘要由CSDN通过智能技术生成

为何写这篇文章。因为string在开发中用的实在是太多了。

对于string为何要设计为常量,在内存中的存储等知识都有点不一样。

做个记录,算是自己的一点思考。

问题1:string为何设计为不变常量?

引用java核心技术作者的原话:java设计者认为string的不可能性带来的共享高效率优于可变的低效率。

人话:不可变可以带来字符串的共享。效率和安全性。

安全性的说法是:多线程操作的时候,对这种不可变的数据不进行锁的操作,如果可变,则会多一些操作,安全性更差。当然不一定是多线程操作,单线程的情况,如果像对象引用一样容易被改变,那么也很容易出错。(比如将字符串传入到方法中,方法里面对字符串进行了修改,如果可变的话,会导致这个引用对应的字符串都发生了修改,不管是方法内还是方法外)

问题2:string如何做到不变?

其实并不是完全不可变。

先说不可变的原因:final + private修饰的字符数组。

可变的原因:字符数组是引用,可以通过反射获取到引用,并对他进行修改。

扩展:

integer等其他的基本数据类型也是不可变的。

好处:安全性。(同string,类似)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值