String为什么是不可变的?

原因一、String字符串类型的数据结构

        字符串在String类的内部是用一个char[]数组表示的,而这个数组使用final关键字修饰的,所以不能修改。

举例说明:

String ip="127.0.0.1";
String ret=ip.replace(".","#");
System.out.println(ip);
System.out.println(ret);

输出结果:

127.0.0.1
127#0#0#1 

原因二、每次修改,都会产生一个新的字符串

//邮箱地址
String email="12345@qq.com";
//截取用户名
int endIndex=email.indexOf("@");
String id=email.substring(0,endIndex);
System.out.println(id);

输出结果:12345

        看了上述代码,可能会想,id是把email截取过后赋值给他自己吗?那么email变了吗?我们可以通过String类的源代码得知,当我们输入的参数是合法参数时,会new一个新的字符串对象,即截取后的“12345”,将其赋值给id,当我们输出email时,就会发现email的值并没有改变,还是截取前的"12345@qq.com"。

        在我们通过string类的其他方法改变它的值时,都是通过产生一个新的字符串对象,将修改过后的值赋给这个新的字符串对象,原字符串从始至终都没有改变

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值