Java 中的引用到底是什么?是内存地址吗?Java 引用是否等同于取消引用的 C++ 指针?
换句话说,给定以下内容:
Object o1 = new Object();
Object o2 = new Object();
o1 == o2
上述比较是否等同于比较 C++ 中的两个指针?
o1 == o2
几乎等同于比较 C/C++ 中的两个指针,是的。
但是 Java 中的引用和 C/C++ 中的指针之间有两个非常重要的区别:
还有一个关于“引用”这个词的简短说明:C++ 的引用与 C 中的指针和 Java 中的引用完全不同(但我对 C++ 的了解不够多,无法告诉你细节)。
有关此问题的详细讨论,请参阅有关programmers.SE 的相关问题。
Java 中的引用到底是什么?
它是对象的索引。它可以被认为是一个指针,但不同之处在于它
上述比较是否等同于比较 C++ 中的两个指针?
是的。
On Compresses Oops 允许 64 位 JVM 起诉 32 位引用。
是的,引用基本上与指针相同。顺便说一句,如果你在一个空引用上调用一个方法,你会得到……一个 NullPointerException。
请注意,它不一定是内存地址。给定的对象可以在程序执行期间存储在其他地方,并且仍然保持相同的引用。但是你不需要关心,因为 Java 中不存在指针算法。
引用是 Java 中指向内存地址的“指针”,尽管 Java 消除了对指针的直接操作,这与 C++ 不同。Java 中的对象永远不会传递给方法或由方法返回,它始终是被传递的引用。