Java 中是否有类似于 C++ 中引用类型"&"的内容?
Is there anything in Java similar to the reference type "&" in C++?
我知道在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
类型(。
相关文章:
- 检查 std::shared_ptr<> 的当前底层类型是否为 T
- 强制转换为引用类型
- 检查函数返回类型是否与STL容器类型值相同
- 检查某些类型是否是模板类 std::optional 的实例化
- 表达式 SFINAE:如何根据类型是否包含具有一个或多个参数的函数来选择模板版本
- 检查一个类型是否直接派生自"enable if"上下文中的另一个类型(是其子类型)
- 自定义引用类型
- 如何检查模板类型是否可以从给定类型构造
- 用于检测函数类型是否为否的特征
- Java 中是否有类似于 C++ 中引用类型"&"的内容?
- 通过引用传递参数;函数返回类型是否必须为 VOID?
- 强制转换为不相关的引用类型是否违反严格的别名规则?
- 使用 python 绑定来检查 C++ 类型是否是规范方式的指针、引用等?
- 是否可以将引用类型别名与指针运算符一起使用来声明对指针的引用?
- 模板参数是否可以是引用类型?
- 是否在值类型列表中保留引用类型
- C++是否从具有取消引用类型的函数返回引用
- 在C++中使用指针或引用作为函数的返回类型是否有经验法则
- 如何确定一个类型是否可以只使用常量引用进行调用
- 是否可以将引用类型传递给模板以指定以下非类型模板参数的类型?