为什么java不支持指针?

use*_*216 4 java

可能重复:
为什么我们不能在Java中使用指针?

我想知道java中是否有任何指针概念?

我知道没有明确的指针声明,但实现了implcitly指针概念.为什么java中没有指针

mik*_*era 9

你必须区分指针的几种用法:

  • 通过指针算法访问内存 - 这从根本上说是不安全的.Java具有强大的安全模型,因此不允许使用指针算法.如果没有昂贵的运行时检查,JVM就不可能确保包含指针算法的代码是安全的.你不需要指针算法,除非你编写极低级别的代码(在这种情况下你可能应该使用汇编程序或C/C++)
  • 通过指针偏移进行数组访问 - Java通过索引数组访问来实现这一点,因此您不需要指针.Java索引数组访问的一大优势是它可以检测和禁止越界数组访问,这可能是错误的主要来源.这通常值得付出一点点运行时开销的代价.
  • 对象的引用 - Java有这个,它只是不称它们为指针.任何普通对象引用都可以作为其中之一.当你这样做时,String s="Hello";你会得到一个有效的指向字符串对象的指针.
  • 通过引用传递参数,即传递一个允许您更改调用者范围中变量值的引用 - Java没有这个,但它是一个非常罕见的用例,可以通过其他方式轻松完成.这通常等同于更改调用者和被调用者都可以看到的对象范围中的字段.
  • 手动内存管理 - 您可以使用指针手动控制和分配内存块.这对于某些应用程序(游戏,设备驱动程序)很有用,但对于通用的OOP编程,它根本不值得付出努力.相反,Java提供了非常好的自动垃圾收集功能,可以为您完成内存管理.这是一件非常好的事情:对于之前被迫在Pascal/C/C++中处理手动内存管理的许多人而言,这是Java推出时的最大优势之一.

所以整体Java没有指针(在C/C++意义上),因为它不需要它们用于通用OOP编程.此外,添加指向Java的指针会破坏安全性和健壮性,并使语言更加复杂.


Thi*_*ilo 3

如果你问为什么不直接访问内存位置,那就是为了保证内存访问安全。不再出现段错误和缓冲区溢出,无论程序员多么无能(并且托管内存对于程序员来说也非常方便,无论多么有能力)。

如果您问为什么不传递引用或函数指针,那么有一些解决方法可以使用其他构造实现相同的效果。