下面,你會看到兩個非常簡單的Java程序。在第一個程序中,我沒有使用returnTrue()
方法的返回值,在第二個程序中,我將它分配給一個靜態字段。使用方法的返回值和離開它們有什麼區別?
第一程序:
package test;
public class Test {
public static void main(String[] args) {
returnTrue();
System.out.println("Finished!");
}
public static boolean returnTrue() {
return true;
}
}
第二方案:
package test;
public class Test {
public static boolean Result;
public static void main(String[] args) {
Result = returnTrue();
System.out.println("Finished!");
}
public static boolean returnTrue() {
return true;
}
}
都工作得很好,並打印在輸出"Finished!"
。
現在,我想知道內存中會發生什麼,如果我把returnTrue()
的行放在一個無限循環中?就我所知,在第二個程序中,它將true
分配給無限存儲器中的特定地址(即地址Result
)。 (對吧?)
但我對第一個程序沒有任何意見。在這種情況下會發生什麼? JRE是否選擇一個隨機地址並將所有返回值分配給相同的地址?或者它將每個返回值分配給一個特定的地址?甚至它離開它,並沒有把它分配給任何地址?
你能向我們展示你想要探索的行爲的最終代碼嗎? – Andremoniy 2015-04-06 08:13:22
不可以。您無法控制內存地址 - 新對象,「返回」值 - 將始終分配在內存中。然後將創建該地址的_reference_。 _reference_是通過值**傳遞的。是否將它分配給變量是無關緊要的。 – 2015-04-06 08:13:36
聽起來像你想知道當一個函數返回一個值時會發生什麼,但是你沒有把該值賦給任何變量。什麼都沒有發生 - 價值沒有被存放在任何地方; JVM只是將它放在地板上。 – dnault 2015-04-06 08:14:10