Java 中是否有类似于 C++ 中引用类型"&"的内容?

Is there anything in Java similar to the reference type "&" in C++?

本文关键字:引用类型 是否 类似于 C++ Java      更新时间:2023-10-16

我知道在Java中,除了几个原始类型之外,所有内容都是(对象的(引用类型。但是,我没有找到一种简单的方法来执行通常通过在C++中使用引用来完成的操作。事实上,我认为 Java 中的引用有点像 C++ 中的指针,因为如果我将一个变量分配给另一个对象,该变量引用的前一个对象不会受到影响。但是,在C++中,如果我有一个int a并且我int& b引用"a",那么这两者实际上是一回事——"b"的赋值会改变"a"的值。

我问题的原因是我正在编写BST ADT,遇到了一些麻烦,我会使用C++中的引用来解决。 例如,我想实现add方法:

void add(K key, V val) {
if (this.key.equals(key))
this.val = val;
node child = next(key);  
// next is a function to determine the child in the next layer according to the key
if (child != null)
child.add(key, val);
else {
...  // FIX THIS
}
}

现在,如果我正在编写C++,我可以让next返回一个引用并child节点,这样我只需要让child = new node(key, val);就完成了。但是在 Java 中,相同的语句只会将child分配给另一个节点,并且树不会受到影响。

没有办法让一个 int 变量"指向"与 java 中的另一个 int 变量相同的内存位置。完全不可能。

但是,有一些自定义类型(如 AtomicInteger(可以完成这项工作:

AtomicInteger x = new AtomicInteger();
x.set(10);
m(x);
System.out.println(x); // prints 20
...
void m(AtomicInteger x) {
x.set(20);
}

这并不能帮助您"适应现有的API",但这就是重点。如果我编写一个接收int参数的方法,我知道在我的方法执行过程中没有什么可能会弄乱它。这很好,java故意不允许你在未经明确同意的情况下打破它(其形式是让参数是AtomicInteger类型(。