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

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

谢谢 :)

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

Java没有这样的指针(不像C#,它有引用指针 – 后者用于“不安全”代码)。

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

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

不,Java没有指针。 Java中的基本概念是“值”与“引用”。

引用是一个通常无法看到的指针(即内存地址)。 允许的唯一操作是设置它(从另一个引用)并通过它引用到引用的对象。 它可以从引用值表达式(如new运算符)或另一个引用(在语法上是一个简单的引用值表达式)设置。

 Cat x = new Cat(); 

此行在内存中创建Cat对象,并在x中存储对它的引用。

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

 x = x + 1; 

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

如果我们将引用或指针视为一种访问或处理内存中对象的方法,它们就大致相同。 但是,它们在实施方面有所不同。 以下是差异:

  1. 指针支持指针算术,这使它们成为一种不安全的方法。 因为它们为程序员提供了远远超过需要的访问级别。 但是,引用通过更抽象的隐藏实现提供了对象的句柄。

  2. 指针的类型不太强,引用的类型更强。 我的意思是代码在引用的情况下非常简单,在指针的情况下稍微不那么正式。 你需要使用reinterpret_cast类的东西来使用指针强制转换,另一方面,引用支持在“C”中使用那种原始类型的强制转换。

  3. 指针是不安全的,参考是安全的。 如果您在两个选择引用之间有选项。 在像C#这样的语言中,你拥有这种自由。

  4. 指针存在于C / C ++中,引用存在于Java中。 不要将C / C ++中的引用与Java中的引用混淆。 C / C ++中的引用是一种用于C / C ++中指针右值的同义词。

指针只包含地址但参考不包含地址如果我们坦率地说对象的地址被分配给索引或者我们说如果我们将看到引用变量的内容就可以将哈希代码和案例代码赋予引用变量它以类名@ @开头,之后是一些hex代码。 这些nos不是地址,它是索引值或哈希码。

第二点我们不能对值的内容参考值执行任何算术运算