2014-03-04 7 views
3

내가해야 할 일은 일어나지 않습니다. 아래의 코드는 제가하고있는 일의 발현입니다. arrayList를 만들고 정수 배열을 추가합니다. 그런 다음 새로 생성 된 정수 배열을 내 arraylist의 첫 번째 요소에 할당합니다. 그런 다음 구성된 정수 배열의 값을 변경합니다. 나는 arrayList 요소와 정수 배열을 모두 출력하고 그들은 같은 값을 가지지 않는다.Integer Array의 변경으로 ArrayList의 값이 변합니다.

ArrayList<int[]> path = new ArrayList<int[]>(); 
int loc2[] = {0,0}; 

path.add(loc2); 

int loc[]; 

loc = path.get(0); 

loc[0] += 1; 

System.out.println(loc[0]); 
System.out.println(path.get(0)[0]); 

코드의 시스템 출력이 두 줄에서 동일하지 않아야합니다.

나는 현저하게 잘못된 일을하고 있습니까? 아니면 제가하려고하는 일에 대해 오해하고 있습니까?

+0

'발생하면 안됩니다.'왜 안 되니? 그들은 참조 객체를 보았을 때 같은 객체 인 – njzk2

+0

입니다. loc2 == loc == path.get (0) – njzk2

답변

2

참조로 변경되었습니다.

loc에 지정하는 번호는 loc2의 "주소"입니다. loc으로 무엇을하던간에 loc2은 같은 주소를 사용하기 때문에 발생합니다.

기본 루프를 사용하여 수행해야 할 작업은 deep copyloc2 ~ loc입니다. 예 :

public int[] copyArr(int[] arr) { 
     int length = arr.length; 
     int[] newArr = new int[length]; 

     for (int i = 0; i < length; i++) { 
     newArr[i] = arr[i]; 
     } 

     return newArr; 
} 
1

동일한 실제 정수 배열에 대한 참조를 다루고 있습니다. 당신은 효과적으로 'loc2'를 다시 꺼내서 'loc'에 할당합니다.

'loc2', 'loc'또는 path.get (0)을 사용하여 처리하는 경우 'loc2'를 만들 때 만든 첫 번째 값 집합을 포함하는 동일한 실제 정수 배열입니다.

ArrayList의 원래 Array를 변경하지 않고도 복사하여 작업하고 싶다면. 새 Array 객체를 만들고 원하는 값을 복사 한 다음 작업해야합니다.

System.arraycopy()를 사용하여 살펴볼 수 있습니다. Make copy of array Java

관련 문제