编程语言
首页 > 编程语言> > Java – 按值传递 – 垃圾收集

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