Java中能否将String数组与int数组存入数组的数组?遇类型不匹配报错
Java能否将String数组和int数组存入数组的数组?
问题原因
你遇到的编译报错本质是Java数组的类型继承规则导致的:
- 引用类型数组(比如
String[]):数组元素是引用类型,String[]本身可以向上转型为Object[],符合Object[][](元素类型为Object[]的数组)的元素类型要求。 - 基本类型数组(比如
int[]):数组元素是基本类型int,基本类型不继承自Object,因此int[]不存在向Object[]的向上转型关系,仅int[]本身是Object类的实例,无法赋值给Object[]类型的变量。
报错
Type mismatch: cannot convert from int[] to Object[]就是编译器检测到类型不兼容后抛出的编译错误。
你当前编写的测试代码中,声明的Object i[][]等价于Object[] i[],也就是要求数组中每个元素都必须是Object[]类型,String[]满足要求但int[]不满足,因此编译失败。
解决方法
你可以根据实际场景二选一:
方案1:使用Object类型一维数组存储
所有数组(不管是基本类型数组还是引用类型数组)都直接继承自Object,因此可以用Object[]作为外层数组类型,同时存储String[]和int[]:
String[] strArr = new String[]{"ash","String","Ukara"}; int[] intArr = new int[]{1,2,3,4}; // 外层数组元素类型为Object,兼容所有数组类型 Object[] mixedArr = {strArr, intArr};
注意读取数组元素时,需要先判断元素的实际数组类型,再做强制类型转换后才能操作内部元素。
方案2:将基本类型int数组替换为包装类Integer数组
Integer是int对应的引用类型包装类,Integer[]属于引用类型数组,可以向上转型为Object[],可以直接存入Object[][]:
String[] strArr = new String[]{"ash","String","Ukara"}; // 替换为Integer引用类型数组 Integer[] integerArr = new Integer[]{1,2,3,4}; Object[][] mixedArr = {strArr, integerArr};
内容的提问来源于stack exchange,提问作者LSGanesha
相关产品推荐
相关产品推荐

