用Java重新分配Java中的对象

use*_*810 2 java

这是关于Java中内存分配的noob问题.我想知道以下reassignemnts是否"有问题":

例如.

byte[] b = new byte[10];

..

b = new byte[20]

....

b = new byte[4]
Run Code Online (Sandbox Code Playgroud)

这会擦除堆栈并分配新内存吗?我们可以重新调整变量/对象的大小并以这种方式重新标注它吗?

Abi*_*san 5

这会擦除堆栈并分配新内存吗?

是的,如果没有任何实时参考,旧的对象将被GC.

我们可以重新调整变量/对象的大小并以这种方式重新标注它吗?

不,Java数组无法动态增长.它们的大小总是固定的.

如果是其他对象,则可以更改对象的状态.对于Ex : ArrayList,您可以在创建列表后更改列表的大小.

可能只是一个额外的问题.如果这只是分配新的内存而旧的内存由GC处理,那么可以执行以下操作:

MyObject myobject = new MyObject(byte[20])
... 
myobject= new MyObject(byte[10]);
Run Code Online (Sandbox Code Playgroud)

是的,这是完全正确的.您正在为旧参考重新分配新对象myobject.