Java中的参考究竟是什么?

aus*_*ser 14 java reference

Java中的参考究竟是什么?它是一个内存地址吗?Java引用是否相当于解除引用的C++指针?

换句话说,给出以下内容:

Object o1 = new Object();
Object o2 = new Object();

o1 == o2
Run Code Online (Sandbox Code Playgroud)

以上比较是否相当于比较C++中的两个指针?

Joa*_*uer 17

o1 == o2 几乎相当于比较C/C++中的两个指针,是的.

但是Java中的引用和C/C++中的指针之间存在两个主要区别:非常重要:

  • Java引用不能做指针运算:你不能"添加3"到引用,你只能让它指向另一个(已知的)对象
  • Java引用是强有力的类型:除非将它重新解释为该对象实际存在的类型,否则不能"重新解释"引用另一端的内容.

还有关于"引用"一词的简短说明:C++的引用与C中的指针和Java中的引用完全不同(但我不太了解C++告诉你具体细节).

有关此问题的详尽讨论,请参阅有关程序员的相关问题.


Pet*_*rey 5

Java中的参考究竟是什么?

它是对象的索引.它可以被认为是一个指针,但它的不同之处在于它

  • 可以随时改变.
  • 并不总是与内存地址有直接关系.
  • 在64位JVM中通常是32位.
  • 你无法重新解释引用所指的内容.您只能更改引用本身的类型.

以上比较是否相当于比较C++中的两个指针?

是.


On Compresses Oops允许64位JVM起诉32位引用.

Java HotSpot™虚拟机性能增强 - 压缩的糟糕

Hotspot JVM中的压缩oops

IBM V6 - 使用压缩引用实现更高效的堆使用