z000302 2021-11-22 14:20 采纳率: 80%
浏览 51
已结题

关于String 字符串不可变的一个疑惑

最近在复习B站韩老师的0基础java视频在复习到String字符串这里的时候看到笔记上记了这么一句话:
String 有属性 private final char value[]; 用于存放字符串内容,并且是final修饰的,说明他的值在赋值之后就不可以修改了.
即 value 不能指向 新的地址,但是单个字符内容是可以变化

关于这句话的后半部分理解不是很清楚
既然value字符串数组都已经被final修饰了那就说明我们无法修改value指向的字符串数组的地址值,如果按照他说的对value指向的地址值对应的数组进行操作,那我们也是接触不到这个真正的字符串数组的啊 用什么方法去修改字符串数组中的某个值呢? 使用反射暴破?
如果可以反射爆破不就和String不可变这个概念冲突了吗?
如果不能修改,为什么又要说 value 不能指向 新的地址,但是单个字符内容是可以变化 这句话呢 ?

  • 写回答

2条回答 默认 最新

  • 於黾 2021-11-22 14:28
    关注

    你先别管字符串不字符串的
    数组的地址和数组里面存的值是怎么回事,你现在还一团乱呢
    我给你举个例子,你看看能不能想明白。
    你是个库管员,你管一个仓库,仓库里有一排排的货架,你想象成超市的货架也行。
    现在你定义了一个数组,相当于来了一批货,这个货放到货架上之后,位置就不可以再变了,永远只能放到这个货架上,这就叫地址不可修改
    但是货架上的货物总在进进出出,来了又走,这就是内容可以变化
    那么最后,String类型就是一个标签,它标记了货物名称,它就永远指向这排货架。
    你改变字符串,就是修改了这个标签,你只是把它指向了另一排货架,而不可能改变货架本身。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月11日
  • 已采纳回答 12月3日
  • 创建了问题 11月22日

悬赏问题

  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示