java吧 关注:1,257,422贴子:12,749,450
  • 7回复贴,共1

关于String和StringBuffer

只看楼主收藏回复

它们都被final修饰,为什么StringBuffer可以变呢?#final#


IP属地:安徽来自iPhone客户端1楼2022-01-06 14:56回复
    问的好


    IP属地:福建2楼2022-01-06 15:19
    回复
      广告
      立即查看
      变成了一个新的对象,又不是原来的那个


      IP属地:上海3楼2022-01-06 15:29
      收起回复
        StringBuffer类final了,但是它里面实际存数据的数组又没final
        String是类final了属性也final了


        IP属地:浙江4楼2022-01-06 15:46
        收起回复
          别乱猜,不懂就点进去看源码...
          首先String不可变不是因为final,final只是让它不能被继承, String 内部是数组,
          如果能变,改变数组内容就行了;
          我的理解是,String 不可变是因为设计,String设计包含了常量池,就有复用,一旦复用,你一个变了其他地方也变了,比如说多个地方用一个字符串,一旦变了乱套了;
          其次,StringBuilder/StringBuffer 可以改变, 你可以点 append()方法源码看一下,首先会创建新的数组指定为新的长度,然后复制内容,并指定内部 value 为新的数组;


          IP属地:广东5楼2022-01-06 17:31
          回复