a[2] = a[a.length-1]
当我在Java中使用上面的代码时,它会删除数组a的索引2。从inteliJ调试器我再也看不到了。它从[1]到[3]再到[4]等
a
是一个泛型数组。如果我编码
a[2] = a[7]
其中7是a.length-1,然后按预期复制值
答案 0 :(得分:1)
如果a是一个对象数组,那么它可能使旧的a [2]无效,但它仍然指向一个对象,因此它不会被删除。你需要指定为null才能真正删除它,甚至不保证快速删除,你需要触发垃圾收集。即使这样也不能保证您的数据真正从内存跟踪中删除。其他一些应用程序需要将该区域用于calloc / new并清除该区域(可能不适用于服务器)。
InteliJ调试器必须一直在跟踪常量索引。当您提供变量索引并使旧索引无效时,它会失败。就像C ++的自动矢量化失败一样。有时调试器也有错误(这有时并不罕见)