gpt4 book ai didi

java - Java 取消引用是如何工作的?

转载 作者:行者123 更新时间:2023-12-01 18:25:06 25 4
gpt4 key购买 nike

我需要对 Java 引用(指针)进行一些澄清。我读过这篇( Java is Pass-by-Value, Dammit! by Scott Stanchfield )关于 Java 传递变量的方式的精彩文章。据我了解,所有内容都作为内存指针传递。

public class foo{
int a;
int b;

public foo(a, b){
this.a = a;
this.b = b;
}
}

所以在像这样的代码中:

foo aFoo = new foo(1,2); //new foo created at adress 0x40 for instance
someFunc(aFoo);

someFunc的参数实际上是数字0x40(尽管这可能是一种简化,但为了了解模式)。

现在,假设我创建了另一个类

public class bar{
foo aFoo;

public bar(){
this.aFoo = new foo(1,2);
}
}

并实例化以下变量

bar aBar = new bar();
foo bFoo = new foo(3,4);

现在假设我想将 aBar.aFoo 的值复制到 bFoo 中,例如

bFoo = aBar.aFoo;

如果我现在这样做

bFoo.a = 1234;

我是否也只是将 aBar.aFoo.a 更改为 1234 还是该变量仍然保留值 1

按照我自己的逻辑,bFoo.a 只是一个指针,因此分配一个新变量应该改变这两个位置,但这似乎是不正确的。所以我想我还没有完全理解Java的“引用实际上是一个指针”的概念。或者更确切地说,我可能理解它的指针部分,但不理解指针的取消引用,因为与您总是知道的 C 相比,这是隐式完成的。

最佳答案

bFoo = aBar.aFoo;

-> 您已将 aBar.aFoo 引用分配给 bFoo 局部变量。这称为别名,因为现在您有两种方法来引用同一个对象:bFooaBar.aFoo

bFoo.a = 1234;

-> 您已将 1234 分配给 bFoo 引用的对象的 a 字段。该对象也由 aBar.aFoo 引用。

结果:您已更改 aBar.aFoo.a 的值。

关于java - Java 取消引用是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26488398/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com