java setting array1 = tempArray

时间:2011-04-18 21:21:59

标签: java arrays

我是一名学习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虚拟机只管理它们。使用程序员无权触摸他们)?

3 个答案:

答案 0 :(得分:2)

与数组的直接关联类似于将指针复制到新变量。

如果你有另一个var到tempArray并修改任何值,你也可以修改array1。

但如果没有对该数组的引用,JVM将负责内存。

此外,复制数组的更好方法是制作它的clone()。

答案 1 :(得分:1)

垃圾收集器将负责清理。这个以及缺少析构函数可能是从c ++到java的最显着的差异。您还需要与每个对象作为指针达成协议 - 您不能在堆栈上放置除内置简单类型和指针之外的任何内容。

答案 2 :(得分:1)

在array1指向tempArray之后,您将无法再将其重新分配给之前的值。 (假设没有其他任何引用它的东西)array1最初指向的对象仍将存在于内存中,直到JVM进行垃圾收集以释放内存。