Java中给已初始化的对象数组重新赋值不同长度数组会报错吗?
问题解答
不会触发报错,赋值完成后animals变量会指向长度为5的Animal数组。
Java中数组属于引用类型,你声明的Animal[] animals本质上是一个存储数组内存地址的引用变量,并不是数组本身:
- 执行
Animal[] animals = new Animal[1];时,animals引用指向了堆内存中一块长度为1的Animal数组空间 - 执行
animals[0] = new Animal();时,是操作上述1长度数组的第一个元素完成赋值 - 执行
animals = createAnimals();时,是将createAnimals()方法返回的数组的内存地址,覆盖赋值给animals引用。只要createAnimals()方法的返回值确实是Animal[]类型,这个操作完全符合语法规则,不会抛出任何异常。如果返回类型不匹配,编译阶段就会提示错误,不会走到运行环节。
原长度为1的数组如果没有其他引用指向它,后续会被Java垃圾回收器自动回收,不会影响程序正常运行。
相关代码示例:
Animal[] animals = new Animal[1]; animals[0] = new Animal(); animals = createAnimals();
内容的提问来源于stack exchange,提问作者Davido
相关产品推荐
相关产品推荐

