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

声明异构二维数组触发ArrayStoreException,是否需修改main方法?

问题分析与解决方案

兄弟,你完全找错方向啦!这个问题跟main方法半毛钱关系都没有,是你数组初始化的时候踩了Java数组协变的坑~

首先看你遇到的ArrayStoreException: [Ljava.lang.Integer;异常,它的意思很明确:你试图把一个Integer类型的数组,存入一个只能容纳String类型数组的容器里。

错误原因拆解

你的代码里写了:

Object[][] items = new String[2][];

虽然左边的变量声明是Object[][],但右边实际创建的是String[][]的实例。Java数组是具备运行时类型检查的,这个数组在运行时的实际类型就是String[][],所以它的每一个元素都必须是String[]类型,你硬塞Integer[]进去自然会触发异常。

正确的修改方式

把数组的初始化语句改成Object[][]类型,让它在运行时可以容纳任意类型的数组:

import java.util.Arrays; // 注意首字母大写,打印数组内容时需要

public class test7 {
    public static void main(String[] args) {
        Object[][] items = new Object[2][]; // 这里改为Object数组实例
        items[0] = new String[]{"a", "b"};
        items[1] = new Integer[]{1, 2, 4};
        
        // 如果你想看到数组的具体内容,用Arrays.toString(),否则会打印内存地址
        System.out.println(Arrays.toString(items[0]));
        System.out.println(Arrays.toString(items[1]));
    }
}

额外说明

  • public static void main(String[] args)是Java程序的标准入口方法,完全不需要修改,你的问题和它没有任何关系。
  • 之前注释掉的import java.util.arrays;要改成import java.util.Arrays;(Java类名首字母大写),如果需要打印数组的具体元素,就需要用到Arrays.toString()方法,否则直接打印数组变量只会输出它的内存地址。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:17:53