2017-10-25 1 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

왜이 될 것입니다 :

a[pos]+=1; 

서면과 동일? 확실히 ['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 + ? 같다)

이제는가 있습니다. 399,205,593,210, [1]=21,는 인수로 doChange() 방법에 arr 배열을 전달

0

자바 어레이 오브젝트 [2]=31 때문에, 그것은 실제로 사본 해당 배열 (아닌 요소)의 기준 ID.

간단한 방법으로 doChange() 메서드에서 전달한 것과 동일한 배열을 업데이트하므로 원본 배열에 반영됩니다.

0

당신은

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

이 줄 a[pos]+=1;는, 배열의 각 값에 +1을 추가, 그래서는, 출력 11,21,31 11,21,31이다 기대 당신이 10,20,30 10,20,30를 원하는 경우, 삭제하거나이 줄 doChange(arr);

0

을 언급 할 때 분명히 "11, 21, 31, 11,21,31"을 인쇄하고 doChange 메서드를 사용하여 배열의 모든 요소에 1을 더합니다.

쓰기 :

a[pos]=a[pos]+1;