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では、ローカル参照を新しい配列に変更しましたが、メインobjはまだ元の配列を参照しています。Java では、配列もオブジェクトであるため、配列は通常のオブジェクトと同様に参照として宣言されます。

于 2013-03-18T16:25:40.290 に答える
0
  • これは、obj配列をfunc()に渡すと、実際には配列'obj'のコピーが1つ作成され、それがパラメーターとして渡されたためです。

    したがって、コピーに変更を加えても、元の「obj」には影響しませんでした。

于 2013-03-18T16:31:23.760 に答える