0

我的意思是,当我们从该函数返回时,数组的地址与我们进入函数之前的地址相同。一个例子:

 class sdasd {
     public static void main(String[] args){
            int[] obj = new int [7];
            //obj has an address
            sdasd t = new sdasd();
            t.func(obj);
            //obj has the same address as before!!
            }
     void func(int[] obj){
        int[] otherObj = new int[13];
        obj=otherObj;``
        //we changed the address of the array 'obj'?
        }
   }

谢谢你的帮助

4

3 回答 3

2

在被调用函数obj中是对数组的引用的副本。这样你就有了,就在你进入的时候func,可以说是

  main::obj --> int[7];
  func::obj --> int[7];

分配新数组后,您有

  main::obj --> int[7];
  func::obj --> int[13];

参数是按值传递的,因此会创建它们的副本。当它是引用时,引用的副本指向原始对象;对引用的更改是该方法的本地更改(但对对象本身的更改由所有引用共享!)

为了明确最后一点,如果你已经完成了,而不是分配一个新的参考,就像

 void func(int[] obj) {
     obj[1] = 69;
 }

那么变化将从main::obj.

于 2013-03-18T16:28:13.753 回答
1

那是因为对的引用是按obj值传递给func. 因此,在您的方法func中,您已将本地引用更改为新数组,但 mainobj仍然引用原始数组。在 Java 中,数组也是对象,因此数组被声明为引用,就像普通对象一样。

于 2013-03-18T16:25:40.290 回答
0
  • 那是因为当您将 obj 数组传递给 func() 时,它实际上创建了数组 'obj' 的一个副本,然后将其作为参数传递。

    因此,对副本的任何更改都不会影响您原来的“obj”。

于 2013-03-18T16:31:23.760 回答