a [2] = a [a.length]删除数组a的2

时间:2014-02-23 21:18:29

标签: java arrays

a[2] = a[a.length-1] 

当我在Java中使用上面的代码时,它会删除数组a的索引2。从inteliJ调试器我再也看不到了。它从[1]到[3]再到[4]等

a是一个泛型数组。如果我编码

a[2] = a[7] 

其中7是a.length-1,然后按预期复制值

1 个答案:

答案 0 :(得分:1)

如果a是一个对象数组,那么它可能使旧的a [2]无效,但它仍然指向一个对象,因此它不会被删除。你需要指定为null才能真正删除它,甚至不保证快速删除,你需要触发垃圾收集。即使这样也不能保证您的数据真正从内存跟踪中删除。其他一些应用程序需要将该区域用于calloc / new并清除该区域(可能不适用于服务器)。

InteliJ调试器必须一直在跟踪常量索引。当您提供变量索引并使旧索引无效时,它会失败。就像C ++的自动矢量化失败一样。有时调试器也有错误(这有时并不罕见)