java吧 关注:1,298,652贴子:12,838,446

回复:为什么选中的语句输出不是54321?

只看楼主收藏回复

因为oldList本身没被改变过,只是用来构造新的数组了也就是说只有读操作。


IP属地:黑龙江37楼2021-01-05 22:36
回复
    你的reverse函数前几句修改的都是newList这个数组对象的值,你最后让list=newList,这句被执行完,list指向了newList。
    注意!list是实际数组引用(oldList)的一个副本,你可以通过list修改实际数组的内容,因为oldList和list指向的是同一个对象,这时,list==oldList------>{1,2,3,4,5};
    但是,
    你并没有通过list修改数组对象的内容,你是让list指向了另外一个对象,就是newList。
    这个时候,list==newList------->{5,4,3,2,1},
    看到没有,oldList的引用没有发生变化,而且你也没有通过list修改原来数组的内容,所以函数执行完,oldList不会发生任何变化。
    解决方法很多种,你完全可以通过list进行数组反转,不用创建一个新的数组,只需创建两个索引。
    初始,两个索引分别指向数组的第一个和最后一个元素,当前面的索引<=后面的索引,就进行交换,之后前面的索引往后移,后面的索引往前移,当前面的索引>后面的索引时,就停止。



    IP属地:美国38楼2021-01-05 23:52
    收起回复
      2026-03-04 11:56:09
      广告
      不感兴趣
      开通SVIP免广告
      传入的数组是复制了一份,第17行将复制数组的地址改了,所以不会对原来的数组产生影响,你打印一下地址就知道了


      来自Android客户端39楼2021-01-06 10:35
      回复
        我知道你想问什么,你想说在reverse中,list已经改变了,怎么main中的oldlist没变吗


        IP属地:重庆来自Android客户端40楼2021-01-06 11:43
        回复
          试试把in【】oldlist改为Integer试试,没起作用说明这里的数组传的是xxx值而非数组地址(数组存在jvm中的哪里,我也不清楚。。。) 传的是值而非地址,实在不行换list一定可以。


          IP属地:江西来自iPhone客户端41楼2021-01-06 11:54
          回复
            看图


            IP属地:北京来自iPhone客户端42楼2021-01-06 12:52
            收起回复
              挺经典的面试题


              IP属地:北京来自iPhone客户端43楼2021-01-06 12:53
              回复
                你写的函数是值传递,要改变oldlist就要用地址传递


                IP属地:北京来自Android客户端44楼2021-01-06 13:12
                回复
                  2026-03-04 11:50:09
                  广告
                  不感兴趣
                  开通SVIP免广告
                  你局部变量的改变关我全局变量什么事


                  IP属地:四川来自Android客户端45楼2021-01-06 15:23
                  收起回复
                    小老弟,补一补java值传递知识


                    来自iPhone客户端46楼2021-01-06 17:11
                    回复
                      值传递~引用传递


                      IP属地:北京来自iPhone客户端47楼2021-01-06 20:30
                      回复
                        好多回答都是错的...


                        IP属地:浙江来自Android客户端48楼2021-01-06 22:00
                        回复
                          可以这样理解 基础类型传的值,非基础类型传的地址


                          IP属地:北京来自Android客户端49楼2021-01-07 08:52
                          回复
                            17行list改成oldlist估计就是你想要的结果


                            IP属地:广东来自iPhone客户端50楼2021-01-07 12:36
                            回复
                              2026-03-04 11:44:09
                              广告
                              不感兴趣
                              开通SVIP免广告
                              在此过程中好像没有对oldlist进行赋值操作吧?


                              IP属地:江苏51楼2021-01-07 15:06
                              回复