【发布时间】:2015-12-21 02:34:09
【问题描述】:
试图完全掌握 Java 的传递值。假设我们有这段代码:
public class Test {
static void switchIt(Test t) {
t = new Test();
}
public static void main(String ... args) {
Test a = new Test();
switchIt(a);
}
}
当a 引用的对象被传递给switchIt() 时,引用值被复制到t。所以我们会有两个不同的引用变量,它们具有相同的位模式,指向堆上的一个对象。
当t = new Test() 运行时,显然a 仍然指向旧对象,而t 现在指向堆上的新对象。由于a 和t 引用变量曾经具有相同的位模式,这是否意味着Java 隐式更改了t 引用变量的位模式?或者假设位模式从一开始就相同是错误的吗?
假设a 引用变量在堆栈上表示为 0001。当我将它传递给函数时,这意味着 t 在堆栈上也表示为 0001,因为我传递了位的副本参考变量。
当我将t 分配给new Test() 时,如果t 和a 在堆栈上都表示为0001,那么t 的0001 会改变吗?
【问题讨论】:
-
“由于 a 和 t 引用变量过去具有相同的位模式,这是否意味着 Java 隐式更改了 t 引用变量的位模式?”目前尚不清楚你的意思是什么。您只是为变量分配一个新值......它与以前的值有什么不同?
-
编辑试图澄清。我可能只是对引用变量在堆栈上的表示方式有一个误解。
-
这和垃圾回收没有关系吧?
标签: java pass-by-value