2016-08-17 1 views
0
  1. このコードの出力が225である理由をお答えください。なぜあなたはaを変えているから222ですか?
  2. コード2を見て、aがtest()に渡されたとき、それは完全に変更されました。私の質問は、number 1の 'a'がtest()に渡されたときに変更されず、number 2の 'a'が変更されたのはなぜですか? 私はJavaの初心者です。

1.Javaの配列と混同されています

public class Array1 
{  
    static void test(int[] a) 
    { 
     int[] b = new int[2]; 
     a = b; 
     System.out.print(b.length); 
     System.out.print(a.length); 
    } 

    public static void main(String[] args) 
    {  
     int[] a = new int[5]; 
     test(a); 
     System.out.print(a.length); 
    } 
} 

2.

public class Array2 
{ 
    static void test(int[] a) { 
    int[] b = new int[2]; 
    for(int i =0; i< a.length; i++) 
    { 
     a[i]=1; 
    } 
} 

public static void main(String[] args) 
{ 
    int[] a = new int[5]; 
    test(a);  
    for(int i =0; i< a.length; i++) 
    {   
     System.out.print(a[i]);  
    } 
} 

答えて

0

のは、1

メイン

場合にはステップごとに何が起こるか見てみましょう:int[] a = new int[5];:参照変数を宣言主に5つの整数の配列を指している
メイン:test(a); :static void test(int[] a) {int[] b = new int[2];:発信者アレイは=>試験におけるa元の配列
試験に対する別
参照された参考文献を保持するa変数REFを宣言する宣言元の配列
試験を用いて試験を呼び出しa = b;:残りのメイン

a可変であるように、新しいアレイにREF試験点における可変aを行う=>元の配列が変更されていない2つのint値
試験の新しい配列に対する試験のRef変数出力は現在正常です。

今ケース2:

メイン:int[] a = new int[5];:5つのint
メインのアレイに主ポインティングのRef変数を宣言:test(a)。 :static void test(int[] a) {:元の配列
試験を用いて試験を呼び出しint[] b = new int[2];:宣言試験において発信者配列=>aへのREFを保持する変数a refは、元の配列
テストに別の参照で宣言しテスト中のref変数を2 intの新しい配列
...
test:a[i] = 1;aは元の配列の値を変更しています。

出力がクリアされるはずです。あなたが225になっている最初のコードで

0

: - Bのaa111

LETアドレスで - bb111

1)BEはの

LETアドレス:以下

は理由がありあなたはテストメソッドのアドレスがbb111になるようにテストメソッド内のaのアドレスを変更しています。

2)しかし、あなたはaa111であるaの元のアドレスに復元するメインメソッドにaを戻していません。

3)テストメソッドからaを返すと、222が返されます。ここ

はその

public class Array1 
    {  
      static int[] test(int[] a) 
      { 
       int[] b = new int[2]; 
       a = b; 
       System.out.print(b.length); 
       System.out.print(a.length); 
       return a; 
      } 
      public static void main(String[] args) 
      {  
       int[] a = new int[5]; 
       a = test(a); 
       System.out.print(a.length); 
      } 
    } 
のコードです
関連する問題