Java – 按值传递 – 垃圾收集
作者:互联网
试图完全掌握Java的pass-by-value.假设我们有这个代码:
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()运行时,显然仍然引用旧对象,而t现在指向堆上的新对象.由于a和t引用变量曾经具有相同的位模式,这是否意味着Java隐式地改变了t引用变量的位模式?或者假设位模式始终相同是错误的?
假设一个引用变量在堆栈上表示为0001.当我将它传递给函数时,这意味着t也在堆栈上表示为0001,因为我传递了引用变量中的位副本.
当我将t分配给新的Test()时,如果t和a两者在堆栈上表示为0001,那么0001会改变t吗?
解决方法:
想一想:
Java没有传递对象,它正在传递对象的内存指针.创建新对象时,它会获得一个新指针.所以当我们说java总是按值传递时,它是因为它总是传递对象的指针,这是一个数值.
即使对象彼此相等(a.equals(t))也可能返回true – 它们不相同,因为它们具有不同的指针,因此是驻留在不同存储空间中的不同对象.
使用您的编辑示例. a会有0001但是t会是0002
Is Java “pass-by-reference” or “pass-by-value”?
希望有所帮助
标签:java,pass-by-value 来源: https://codeday.me/bug/20190829/1763101.html