String类为什么是final的

本文解析了String类型在Java中的不可变性及其原因,并对比了StringBuffer的实现方式。通过实例说明了String赋值与拼接时如何产生新对象,以及StringBuffer如何在原有内存地址上修改数据。

1.string的不可变性
比如第一次赋值“abc”,第二次赋值“abcd”,不是在原内存地址修改数据,而是重新指向一个新地址、新对象
2.string为什么不可变
打开JDK源码
final修饰的String,代表了String的不可继承性,final修饰的char[]代表了被存储的数据不可更改性。但是:虽然final代表了不可变,但仅仅是引用地址不可变,并不代表了数组本身不会变
3.stringbuffer是在原来内存地址的基础上修改数据

值传递和引用传递
比如下面这种 string s作为参数传递是引用传递 但是因为操作方式的不同 string相加会产生新的对象 不会对原对象进行修改 所以传入s以后 s值并没有改变
在这里插入图片描述

用stringbuffer的话 作为引用传递 修改的是原对象的内存地址 所以原来的s值也被修改了

在这里插入图片描述
描述的可能有些不是很准确 仅供参考

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值