Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果Java不支持指针,那么它如何记录保存数据的内存位置? 编程语言如C和C++使用指针,但java不使用它们,因为它是安全的,那么它如何保持动态分配的内存记录,而C中使用指针来维持?_Java_Pointers - Fatal编程技术网

如果Java不支持指针,那么它如何记录保存数据的内存位置? 编程语言如C和C++使用指针,但java不使用它们,因为它是安全的,那么它如何保持动态分配的内存记录,而C中使用指针来维持?

如果Java不支持指针,那么它如何记录保存数据的内存位置? 编程语言如C和C++使用指针,但java不使用它们,因为它是安全的,那么它如何保持动态分配的内存记录,而C中使用指针来维持?,java,pointers,Java,Pointers,java确实有指针。假设你有一个类 >属性>代码> x>代码>使用SETER和GETTER 无效SETIXX(INT)和 int GETX x(),并考虑此代码: public static void foo(A a) { a.setx(13); } public static void main() { A a = new A(); a.setx(12); foo(a); System.out.println(a.getx()); } 这将打印13,

java确实有指针。假设你有一个类<代码> <代码> >属性>代码> x>代码>使用SETER和GETTER <代码>无效SETIXX(INT)和<代码> int GETX x()<代码>,并考虑此代码:

public static void foo(A a)
{
   a.setx(13);
}

public static void main()
{
    A a = new A();
    a.setx(12);
    foo(a);
    System.out.println(a.getx());
}
这将打印
13
,因此这确实是一个指针。然而,您不能像在C中一样自由地声明指针并使其指向。也不能使用指针算术


Java虚拟机中有很多指针,但是程序员不会看到它们

Java不公开指针。JVM的内部使用它们。Java使用指针或实际上JVM使用指针,大多数现代语言都在内部进行内存分配。当您声明一个类类型的变量并为其赋值时,它将是一个“引用”,其基本用途与指针相同,除了你使用它的能力有限外:(1)你不能用它做算术;(2) 不能使它指向基元类型的变量或任意内存区域。但是它仍然像一个指针一样工作,如果你想的话,你可以把它看作一个指针;我认为它包含一个索引到一个存储地址的对象表中。这样做将允许将对象移动到不同的位置(尽管我不确定JVM是否这样做),并可能在其他方面帮助内存管理器。不过,我对JVM的内部结构知之甚少。我有点猜测。不向用户公开指针与安全性无关。向下投票人:这个答案有什么问题吗?