使用方法的 return 值和保留它们有什么区别?
What's the difference between using method's return values and leaving them?
下面,您会看到两个非常简单的 Java 程序。在 first 程序中我没有使用 returnTrue()
方法的 return 值,在 second 程序中我将其分配给静态字段。
第一个节目:
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()
的行放入无限循环中,内存中会发生什么情况?据我所知,在 second 程序中,它将 true
无限分配给内存中的特定地址(即 Result
的地址)。 (对吗?)
但是我对first程序一无所知。在那种情况下会发生什么? JRE select 是否是随机地址并将所有 return 值分配给同一地址?或者它将每个 return 值分配给特定地址?或者甚至它离开它并且不分配它到任何地址?
当方法 returns 时,return 值通常留在内存中线程的堆栈中,无论调用代码在哪里停止。 stack 是通常用于此目的的重要数据结构。
假设我们有如下代码:
void m1() {
int i;
int j;
boolean b = m2();
}
boolean m2() {
float f;
float g;
return true;
}
当m1
开始执行时,堆栈开始扩展以保留space局部变量:
int
int
boolean
m2
被调用,堆栈再次扩展:
int
int
boolean
float
float
m2
returns,堆栈以相反的顺序展开:
int
int
boolean
请注意,堆栈中的最后一个 space 是 m2
的 return 值的局部变量,其中存储 true
。
当您将 return 值分配给某物时,原始值或对象引用将从堆栈复制到您分配给它的位置(在本例中为静态字段)。
如果您不将其分配给任何东西,return 值将被忽略。
[…] what happens in memory if I put the line with returnTrue()
in an infinite loop?
它重复执行上述步骤。
Does the JRE select a random address and assign all the return values to the same address? Or it assigns each return value to a specific address?
见上文,它被放入堆栈。
下面,您会看到两个非常简单的 Java 程序。在 first 程序中我没有使用 returnTrue()
方法的 return 值,在 second 程序中我将其分配给静态字段。
第一个节目:
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()
的行放入无限循环中,内存中会发生什么情况?据我所知,在 second 程序中,它将 true
无限分配给内存中的特定地址(即 Result
的地址)。 (对吗?)
但是我对first程序一无所知。在那种情况下会发生什么? JRE select 是否是随机地址并将所有 return 值分配给同一地址?或者它将每个 return 值分配给特定地址?或者甚至它离开它并且不分配它到任何地址?
当方法 returns 时,return 值通常留在内存中线程的堆栈中,无论调用代码在哪里停止。 stack 是通常用于此目的的重要数据结构。
假设我们有如下代码:
void m1() {
int i;
int j;
boolean b = m2();
}
boolean m2() {
float f;
float g;
return true;
}
当m1
开始执行时,堆栈开始扩展以保留space局部变量:
int
int
boolean
m2
被调用,堆栈再次扩展:
int
int
boolean
float
float
m2
returns,堆栈以相反的顺序展开:
int
int
boolean
请注意,堆栈中的最后一个 space 是 m2
的 return 值的局部变量,其中存储 true
。
当您将 return 值分配给某物时,原始值或对象引用将从堆栈复制到您分配给它的位置(在本例中为静态字段)。
如果您不将其分配给任何东西,return 值将被忽略。
[…] what happens in memory if I put the line with
returnTrue()
in an infinite loop?
它重复执行上述步骤。
Does the JRE select a random address and assign all the return values to the same address? Or it assigns each return value to a specific address?
见上文,它被放入堆栈。