Java的参考究竟是什么?它是一个内存地址吗? Java引用是否等同于解除引用的C ++指针?
换句话说,给出以下内容:
Object o1 = new Object();
Object o2 = new Object();
o1 == o2
上述比较是否相当于比较C ++中的两个指针?
答案 0 :(得分:17)
o1 == o2
几乎等同于比较C / C ++中的两个指针,是的。
但是Java中的引用和C / C ++中的指针之间存在两个主要区别:
关于“引用”一词的简短说明:C ++的引用与C中的指针和Java中的引用完全不同(但我不太了解C ++告诉你具体细节)。
有关此问题的详尽讨论,请参阅this related question on programmers.SE。
答案 1 :(得分:5)
Java的参考究竟是什么?
它是对象的索引。它可以被认为是一个指针,但它的不同之处在于
上述比较是否相当于比较C ++中的两个指针?
是
On Compresses Oops,允许64位JVM起诉32位引用。
Java HotSpot™ Virtual Machine Performance Enhancements - Compressed Oops
Compressed oops in the Hotspot JVM
IBM V6 - More effective heap usage using compressed references
答案 2 :(得分:4)
是的,引用与指针基本相同。顺便说一句,如果你在null引用上调用一个方法,你会得到一个NullPointerException。
请注意,它不必是内存地址。给定对象可以在程序执行期间存储在别处,并且仍然保持相同的引用。但是您不需要关心,因为Java中不存在指针算法。
答案 3 :(得分:1)
引用是Java中内存地址的“指针”,即使Java与C ++不同,也会主动直接操作指针。 Java中的对象永远不会传递给方法或由方法返回,它始终是传递的引用。