Java——理解字符串不变性

  Java里面对于字符串的处理方法有很多,而且string本身在Java里面就是一个类,所以我们在定义一个字符串时可以用new的方法,但是对于Java的字符串本来就存在有一个字符串常量池,在Java虚拟机里面字符串常量池是在方法区,jdk1.8以后和堆合并了,我们知道堆里面存放的是实例化的对象,而且string本身就是一个类,推测所谓的字符串常量池里面也存放的是string的实例对象。

 通过查阅API,里面确实存放的对象

 

string c1=“abc",是产生一个string对象,将”abc",并将这个对象放在字符串常量池中,所以这行代码运行完毕,任然产生的是一个字符串对象,string c2=“abc"只是对常量池里面进行搜索(调用equals方法),存在相同值的对象就返回同一个对象的地址。

如上图代码,c1和c2指向同一块地址,那么当c1的值改变之后,c2却没有变化,说明此时c1和c2指向的不再是同一块内存地址,也就是说,c1此时返回的是一个新的对象,而不是将原来对象的值进行改变,这就是字符串的不变性。

其实,也可以这样去理解,string c1=“abc",这是在创建一个对象,其中c1相当于一个标识符,所以当进行c1=“abs"时,可以理解为创建了另一个对象,用c1去做此对象的标识符。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值