Java中指针和引用变量之间有什么区别?

i l*_*low 14 java

我的Java书解释说,要使用对象,我们可以将它们分配给引用变量.这与指向对象的指针有什么不同?Java有指针吗?

谢谢 :)

Jon*_*eet 17

引用有点像你不能算术的指针......尽管它更不透明.虽然底层位可能是虚拟内存中的地址,但它们不一定是.它们只是获取对象(或表示空值)的一种方式.因此,虽然它们并不完全相同,但如果您习惯将指针视为"识别对象或导航到它的方式"(在某种意义上),那么是的,这些想法也适用于引用.

Java没有这样的指针(不像C#,它有引用指针 - 后者用于"不安全"代码).

  • @morbidCode 取决于 JVM 实现。它不一定是,但可以是。垃圾收集器完成其工作后,必须更新本机指针。 (2认同)

wbe*_*rry 11

术语"参考"和"指针"基本相同.我见过的关于Java基础知识的大部分文献都声称Java没有指针.但是,如果你尝试使用null引用,你会得到一个NullPointerException.所以它都是语义学.

(真正的区别在于,在C或C++中,术语"指针"严格意味着一个恰好是某些数据的内存地址的整数.而在Java中,术语"引用"更接近于C++"引用"概念.您可以即使你想要,也直接使用内存地址,但你以同样的方式使用它.)

  • `NullPointerException`很早就被命名了.一个更好的名字是NullReferenceException. (4认同)

con*_*rt3 9

Cat x = new Cat();
Run Code Online (Sandbox Code Playgroud)

这一行在内存中创建了一个 Cat 对象,并将对它的引用存储在 x 中。

x 现在包含对 Cat 对象的引用,但如果您要这样做:

x = x + 1;
Run Code Online (Sandbox Code Playgroud)

这不会像在 C 中那样给出下一个内存地址,但会给出编译器错误。Java 不允许控制引用或内存位置。

  • 这个简单的例子给出了最重要的区别。 (3认同)