2017-10-25 7 views
-2

なぜ次のコードの出力が11,21,31 11,21,31で、10,20,30 10,20,30でないのですか?Javaで配列を渡す

public class Tp { 

    public static void doChange(int a[]) 
    { 
     for(int pos=0;pos<a.length;pos++) 
     { 
      a[pos]+=1; 
     } 
    } 
    public static void main(String args[]) 
    { 
     int arr[]= {10,20,30}; 
     doChange(arr); 
     for(int x:arr) 
     { 
      System.out.print(x+","); 
     } 

     System.out.println(arr[0]+" "+arr[1]+" "+arr[2]); 
    } 
} 
+0

なぜ、それはどちらかでしょうか?確かに['11,21,31,11 21 31'](https://ideone.com/xt9grA)ですか? –

+1

配列の** content **を変更するため、配列自体は変更しないためです。その配列自体は、戻っても同じです。 – fvu

+1

これは明らかです。あなたは[pos] = a [pos] + 1と等しい[pos] + = 1;を書いています。したがって、コンテンツを取得して1だけインクリメントします。 –

答えて

-1

int arr[]= {10,20,30};arr[]のすべての値に+1を加算するためのループarr[]

+=の基準であるa[]と呼ばれるアレイ[0]=10[1]=20[2]=30

doChange初期x = x + ?に等しいです。 )

今は[0]=11[1]=21、あなたが引数としてdoChange()方法にarr配列を渡す

0

Javaで配列オブジェクトであるため[2]=31、それ実際にコピーし、その配列(いない要素)の参照ID。

簡単な方法で、doChange()メソッドで渡したのと同じ配列を更新しているため、元の配列に反映されます。

0

あなたはこのラインa[pos]+=1;

public static void doChange(int a[])  
{  
    for(int pos=0;pos<a.length;pos++) 
    { 
     a[pos]+=1; 
    } 
} 

を行うと、あなたが10,20,30 10,20,30をしたい場合は、アレイ上の各値に1を追加し、その出力は11,21,31 11,21,31で期待し、doChange(arr);

0

この行を削除したり、コメント明らかにそれは"11, 21, 31, 11,21,31"を印刷し、方法doChangeを使用して配列のすべての要素に1を加えます。

執筆:

a[pos]+=1; 

は書き込みと同じです:

a[pos]=a[pos]+1; 
関連する問題