2013-12-08 2 views
1

그래서 메서드가 값을 반환하는 방식에 대해 오해 한 것 같습니다. 그 이유는 list [0]이 출력에서 ​​3 인 이유는 그것이 void 메쏘드이기 때문에 main 메쏘드에 아무것도 반환하지 않기 때문입니다 ... void 메쏘드가 실제로 값을 반환 할 수 있다면, 왜 num이 여전히 0 일 것입니다 ..... num도 3이되지 않을까요 ?? 또는 void 메서드는 배열을 제외하고 값을 반환하지 않습니까?Java : void 메서드가 값을 반환합니까?

public static void main (String []args){ 

    int []list = {1,2,3,4,5}; 
    int number = 0; 

    modify(number, list); 

    System.out.println("number is: "+number); 

    for (int i = 0; i < list.length; i++) 
    { 
     System.out.print(list[i]+" "); 
    } 

    System.out.println(); 
} 
public static void modify (int num, int []list){ 

    num = 3; 
    list[0] = 3; 
} 

출력 : 그것은 아무것도 반환하지 않습니다

number is: 0 

3 2 3 4 5 
+1

공백은 아무 것도 반환하지 않습니다. 귀하의 방법은 아무것도 반환하지 않습니다. "list"에 의해 참조 된 배열의 내용을 수정합니다. –

답변

5

"값으로 전달", "참조로 전달"및 객체가 참조로 전달된다는 개념에 대해 숙지해야합니다 메서드 호출 사이의 값).

"숫자"는 수정 된 값으로 전달되는 간단한 정수입니다. 따라서 메서드 내에서 "num"에 할당 된 값이 변경 되더라도이 메서드의 호출자가 사용하는 원래 변수는 그대로 유지됩니다.

"list"도 값으로 전달되지만 "list"는 개체이므로이 개체에 대한 참조 (값으로)를 수정 메서드에 전달합니다. 따라서 메서드 내에서 개체의 내부를 변경하면 호출자가 참조하는 동일한 개체가 변경됩니다. 당신이 이런 짓을하면

이제 다음 수정 방법 내에서 "목록"완전히 다른 객체를 가리 키도록 변경됩니다 때문에

public static void modify (int num, int [] list) 
{ 

    num = 3; 
    int [] newlist = {9,8,7,6,5,4}; 
    list = newlist; 
    newlist[0] = 3; 
} 

는 다음 수정에 전달 된 "목록"은 결코 수정되지됩니다.

0

위에서 언급했듯이이 메서드는 실제로 값을 반환하지 않고 배열의 첫 번째 값을 수정합니다. 결과는 '수정'으로 수정 된 값을 반영한 것입니다.

0

list[0] = 3;는 출력 3. 준 이유는 num 함께 할 수 없다 당신이 하지 반환 아무것도했다입니다. 어레이의 내용을 수정하기 만하면됩니다.

관련 문제