首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

String是常量,为什么给字符串重新赋值,值却改变了呢?

我们在学习java基础时,都知道java源码类String是final类代表字符串,是字符串常量,根据常量的定义,一旦定义后值是不可变的,所以它是不可变对象,一旦被创建以后,就不能修改它的值。

那么我们在开发代码时,将之前定义好的字符串重新赋值后,你会发现字符串值确实发生了变化。

例如

输出的结果却是这样

可以看到s这个字符串值发生了改变。

那么从结果上看值是改变了,但为什么说String字符串对象是不可变的呢?

原因在于例子中的字符串s只是一个 String 对象的引用,并不是对象本身,当执行 s = “123”; 创建了一个新的对象 “123”,而原来的 “abc” 还存在于内存中,所以只是s的引用地址发生了变化。

所以对于已经存在的String字符串对象的值进行修改都是重新创建一个新的对象,然后把新的值保存进去。这就是上面为什么字符串s的值改变的原因。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20210222A0DQCJ00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券