java吧 关注:1,236,586贴子:12,707,594
  • 34回复贴,共1

不是说数组用final修饰后,

只看楼主收藏回复

不是说数组用final修饰后,不是数组的值可以改变,而是数组的地址不可以改变了呢,String底层是一个final char value[],为啥可以修改地址而不可以改变值呢?


来自Android客户端1楼2017-05-30 15:39回复
    @Ironresolve老王帮我看看嘛,谢谢了


    来自Android客户端2楼2017-05-30 15:46
    回复
      @Ironresolve


      来自Android客户端3楼2017-05-30 15:46
      回复

        老哥,你可能理解错误我的意思了,String底层是一个final char value[] 实现,但是 final 修饰 数组的 作用 是 此数组的值可以改变,但是它的引用不能改变,
        而且String如下面,值不可以改变,但是可以改变引用
        所以,我就觉得这不是矛盾嘛
        @一共丢10只羊


        5楼2017-05-30 16:41
        收起回复


          来自Android客户端6楼2017-05-30 16:53
          回复


            来自Android客户端7楼2017-05-30 20:35
            回复
              String str ="123";
              str = "345";
              "345"代表了一个新的字符串,一个新的地址


              IP属地:河南8楼2017-05-30 22:03
              收起回复
                你的理解有误, String里内置的char[]是final的, 不代表你申明的string也是final的, 如果你是这样申明的: final String str = "123"; 那这个str当然不能重新赋值.


                IP属地:江苏9楼2017-05-30 22:26
                收起回复
                  两个new本来就不对


                  IP属地:河南来自Android客户端10楼2017-05-31 06:46
                  收起回复
                    string不可改变还因为,他没有提供api让你直接修改char数组的内容,而且类是final让你无法通过继承来修改api。它内部的api都是返回一个新的char数组。


                    IP属地:广东来自Android客户端11楼2017-05-31 07:23
                    收起回复
                      final修饰的数组,地址不可变这是肯定的,但对象的地址可变,两者没有任何关系,String是String数组是数组。
                      不能改变值如楼上所说是没有给出方法,而且final了,这是为了保证常量池不会因为修改而导致,原本是不相等的两个字符串变成一样了,这对性能是一种浪费


                      IP属地:广东12楼2017-05-31 15:46
                      收起回复
                        刚看楼主的问题确实很有道理很矛盾,看下截图的注释,那个value存储的是当前String对象的值,value的地址应该是不变的,即使当前String对象的值发生改变对value的地址没有影响。接着说String,他只是final类,而String xxx =“aaa”只是声明一个变量没有用final修饰说明他是个变量不是常量,因此他被重新赋值时是改变引用的。如果有错互相探讨下。


                        来自Android客户端13楼2017-06-01 16:24
                        回复
                          因为改变String的时候重新创建了一个String对象,是另外一个final 的char数组


                          IP属地:广东14楼2017-06-02 14:49
                          回复
                            String有给你提供修改value的方法吗?


                            IP属地:湖南来自Android客户端15楼2020-04-16 21:59
                            回复
                              知道原因了吗


                              IP属地:湖北16楼2023-02-24 15:23
                              回复