簡體   English   中英

Java:void方法返回值?

[英]Java: void method returns values?

所以,我想我誤解了方法如何返回值的一些東西。 我不明白為什么 list[0] 在輸出中是 3,因為那是一個 void 方法,它不會將任何內容返回給 main 方法......如果 void 方法實際上可以返回該值,那么為什么 num 仍然會是 0 ..... 不會 num 也變成 3 嗎? 或者 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;
}

您可能需要使自己熟悉“按值傳遞”,“按引用傳遞”的概念,並了解對象是引用(在方法調用之間按值傳遞)。

“數字”是一個簡單的整數-按值傳遞給Modify方法。 因此,即使方法中分配給“ num”的值發生了變化,此方法的調用者使用的原始變量也保持不變。

“列表”也是按值傳遞的,但是“列表”是一個對象,因此您要將對該對象的引用(按值)傳遞給Modify方法。 因此,如果您在方法中更改對象的內部,則您將更改調用者引用的同一對象。

現在,如果您這樣做:

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

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

然后,傳遞給修改的“列表”將永遠不會被修改,因為Modify方法中的“列表”被更改為完全指向另一個對象。

它不返回任何內容,只是修改了變量list[0]

如上所述,該方法實際上並沒有返回值……它正在修改數組中的第一個值。 輸出反映了由“修改”修改的值

list[0] = 3; 這就是為什么您提供輸出3的原因。它與num無關,並且您返回任何內容。 您只需修改數組的內容。

當您在方法中聲明“num”時,它只是一個與“number”無關的新整數。 是的,您在方法調用中將“number”傳遞給“num”,但您沒有將“num”傳遞回“number”,因為為了做到這一點,您必須專門將“num”返回給方法調用,這沒有發生,因為返回類型是無效的。 但是,另一方面,list[0] = 3 實際上是對數組的成功修改,因為不需要將數組內容返回給原始方法調用者。 main 方法和 modify 方法都已經指向內存中的同一個數組。 但另一方面,從計算機的角度來看,並不清楚“num”和“number”指向內存中的同一事物。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM