声明异构二维数组触发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
相关产品推荐
相关产品推荐

