2012-04-22 3 views
-2

다음 코드에서 방법 2에서 원래 배열이 변경되었지만 arr2 [0]가 1.5와 왜 같습니까? 다른 배열과 변수를 무시하십시오.참조에 의한 배열 및 전달

public class Problem3 
{ 
    public static int method1(int[] array) 
    { 
     array[0] += 10; 
     return array[0]; 
    } 

    public static int method2(int aNum, String aStr, 
     int[] array1, float[] array2, int[] array3) 
    { 
     float[] fNums = {1.5F, 2.5F}; 
     array2 = fNums; 

     return 10 + method1(array3); 
    } 

    public static void main(String[] args) 
    { 
     int num = 1000; 
     String aStr = "Hello!"; 
     int[] arr1 = {1, 2, 3}; 
     float[] arr2 = {0.5F, 1.5F}; 
     int[] arr3 = {5, 6, 7}; 
     int retNum = method2(num, aStr, arr1, arr2, arr3); 

     System.out.println(arr2[0]); 
    } 
} 
+0

기본적으로 대답은 1.5라고 생각했지만 해결책은 0.5라고 말하면서 누군가 설명 할 수 있는지 궁금합니다. –

+1

이 답변보기 http://stackoverflow.com/a/9404727/597657 –

+0

Java에서 참조로 전달할 수 없습니다. – newacct

답변

2

기본적으로 :

method2(num, aStr, arr1, arr2, arr3); 
public static int method2(int aNum, String aStr, int[] array1, float[] array2, int[] array3) 

를 그리고, 당신이 만드는 array2fNums는 새로운 배열을 말한다 참조하고 배열을 변경하지 않았다면 arr2

float[] fNums = {1.5F, 2.5F}; 
array2 = fNums; 

자세한 내용은 answer을 참조하십시오.

2

는 전체 배열에 대한 참조를 변경하고 외부에서 생성 된 배열에 인수 포인트를 방법 2 호출 할 때.

에 전달 된 배열을 수정하지 않았기 때문에. method2에서 인수를 새 배열을 가리 키도록 만듭니다. 이 메서드는 호출하는 메서드의 변수가 가리키는 배열을 변경하지 않고 원래 배열을 계속 가리 킵니다.

method2에서 제공 한 기존 배열을 간단히 수정 한 경우 호출 방식에서 이러한 변경 사항을 볼 수 있습니다.

-1

Java는 패스 - 바이 - 값 매개 변수 전달 구문을 사용한다고 생각합니다. PSVM() 내에서 float[] arr2을 선언하면 해당 범위가 여기에 국한되며, 배열을 다른 함수에 전달하면 값으로 전달됩니다.

한편 float[] arr2 (하지만 클래스 정의 내에 있음)으로 선언 한 경우 해당 클래스의 범위는 클래스 내에서 전역이됩니다. 그러나 IIRC에서는 코드가 method2()과 같이 하나의 할당으로 전체 배열의 값을 할당 할 수 없기 때문에 코드가 작동한다고 생각하지 않습니다. array2arr2 아니라, 그들이 method2 전화의 메모리에 같은 배열을 참조하기 때문에

관련 문제