我读到指针在 Java 中不可用。但是 C++ 中的“This”指针被“This”关键字替换。那么有人可以解释一下java中指针的动态内存分配和替换吗
7 回答
java中没有指针。Java 使用引用。
java中没有动态内存分配的概念。因此malloc/calloc
在java中没有替代品。JVM 负责为对象创建和释放内存。由于 JVM 已内置垃圾收集功能,因此也没有free
提供替代方案。
在内部,对对象的引用被实现为指针。java中有一个匿名内部类,您可以使用它来代替函数指针。
2.2.9 不再有指针
大多数研究都同意指针是使程序员能够将错误注入其代码的主要功能之一。鉴于结构已不复存在,而数组和字符串都是对象,因此不再需要指向这些结构的指针。因此,Java 没有指针数据类型。任何需要 C 语言中的数组、结构和指针的任务都可以通过声明对象和对象数组来更容易、更可靠地执行。您可以通过算术索引访问数组,而不是对数组指针进行复杂的指针操作。Java 运行时系统检查所有数组索引以确保索引在数组的范围内。
看看这个线程
Java 中非托管指针的“替换”是托管引用。
看看程序员论坛中的这个答案,了解两者之间的区别。
Java 的引用不是指针。你不能用 Java 中的引用来做指针运算。
您可以在此处阅读 Erik Demain 的综合分析:C to Java: Converting Pointers into References
。
Java确实使用指针。它只是为您处理,作为“对象引用”。例如:
String str = new String("efi");
// str is NOT the string object.
// It is a reference to the String object.
不同之处在于,Java 为您执行此操作,并且不允许您自己执行此操作。C++允许您管理它们。
Nothing. Java does not have a concept that is equivalent to Pointers.
Java 使用引用来进行初始化、设置或获取变量等。在 C++ 中,指针基本上是对该变量的内存的引用。所以这里每个声明都是java中的引用,相当于c++中的指针,但在内部由JVM而不是程序员处理。Java 在内部处理这个问题,我们前面没有像 c++ 这样的指针。