我是一名学习java的C ++程序员。在我想要执行以下操作的方法中,获取当前对象(称为array1)中存在的对象数组,并将其替换为不同的数组[tempArray](以c ++代码的形式示例)
$ ...
$15 private void replaceArray(){
$16 // exchanging values tempArray also has been generated in this omitted section
$17 delete[] array1;
$18 array1 = tempArray;
$19 }
$ ...
我遇到的问题是java中并不存在关键字“delete”。所以我的问题是,如果我只做...
$ ...
$15 private void replaceArray(){
$16 // exchanging values tempArray also has been generated in this omitted section
$17 array1 = tempArray;
$18 }
$ ...
原始array1是否仍然存在,没有指针可以访问它,或者是由java的托管代码环境来处理(是的,我知道指针仍然存在,但java虚拟机只管理它们。使用程序员无权触摸他们)?
答案 0 :(得分:2)
与数组的直接关联类似于将指针复制到新变量。
如果你有另一个var到tempArray并修改任何值,你也可以修改array1。
但如果没有对该数组的引用,JVM将负责内存。
此外,复制数组的更好方法是制作它的clone()。
答案 1 :(得分:1)
垃圾收集器将负责清理。这个以及缺少析构函数可能是从c ++到java的最显着的差异。您还需要与每个对象作为指针达成协议 - 您不能在堆栈上放置除内置简单类型和指针之外的任何内容。
答案 2 :(得分:1)
在array1指向tempArray之后,您将无法再将其重新分配给之前的值。 (假设没有其他任何引用它的东西)array1最初指向的对象仍将存在于内存中,直到JVM进行垃圾收集以释放内存。