You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java存储返回数组疑问:小容量数组为何可接收大容量返回数组

Java数组赋值后长度变化的原因

先看你的代码:

import java.io.*;
class test
{

    int[] returnArray()
    {
        int[] arr={1,2,3,4,5,6,7,8,9,10};
        return arr;
    }

    void display(int[] arr)
    {
        for(int i=0;i<arr.length;i++)
        {
            System.out.print(arr[i]+"\t");
        }
    }

    public static void main(String[] args)
    {
        test obj=new test();
        int[] arr=new int[1];

        arr=obj.returnArray();
        obj.display(arr);
    }
}

核心原因是Java中的数组是引用类型,数组变量存储的不是数组元素本身,而是指向堆内存中数组对象的地址。具体过程:

  • 执行int[] arr=new int[1];时,JVM在堆中创建了一个长度为1的数组对象,变量arr保存的是这个对象的内存地址。
  • 执行arr=obj.returnArray();时,returnArray()方法返回的是一个长度为10的数组对象的地址,这个地址会覆盖变量arr原来保存的地址。此时,原来那个长度为1的数组对象因为没有任何引用指向它,会被垃圾回收器自动清理。
  • 调用display(arr)时,arr指向的已经是那个长度为10的数组对象,所以遍历打印时能输出全部10个元素,不会出现越界错误。

你之前的误解在于以为是把长数组的元素塞进短数组里,但实际上只是让数组变量换了一个指向的对象——数组的长度是创建时固定的,无法修改,但变量可以指向不同的数组对象。

内容的提问来源于stack exchange,提问作者Spencer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 14:13:18