Java如何将String和int两个不同类型数组存入同一数组并正常访问
解决方案
你当前写法报错是因为Java为强类型语言,int[][] 类型的二维数组只能存储 int[] 类型的一维数组,String[] 类型和 int 类型不兼容,自然无法完成转换。
针对你的需求,有两种常用的实现方案:
方案1:使用 Object[][] 作为返回类型
Java中所有类都继承自Object类,基础类型的数组本身也是对象,因此可以直接将两类数组存入Object类型的二维数组中:
String[] grades = {"A", "B", "C", "D", "E", "F"}; int[] marks = {90, 80, 70, 60, 50}; Object[][] combined = {grades, marks};
访问元素时仅需要做对应类型的强转即可:
- 获取
combined[0][4]的E:String result = (String) combined[0][4]; - 获取
combined[1][0]的90:int mark = (int) combined[1][0];
注意:该方案没有编译期类型校验,强转类型错误时会抛出ClassCastException,适合临时简单使用的场景。
方案2:面向对象封装(更推荐)
你当前的两个数组本质是一一对应的等级-分数映射关系,更合理的做法是封装为独立的实体类,类型安全且不会丢失int类型的原生功能:
// 自定义实体类 class GradeMapping { private String grade; private int mark; public GradeMapping(String grade, int mark) { this.grade = grade; this.mark = mark; } // getter方法 public String getGrade() { return grade; } public int getMark() { return mark; } }
使用时直接构造实体类数组即可:
GradeMapping[] combined = new GradeMapping[6]; combined[0] = new GradeMapping("A", 90); combined[1] = new GradeMapping("B", 80); // 依次填充剩余元素
访问对应元素的方式:
- 获取索引4对应的等级E:
String grade = combined[4].getGrade(); - 获取索引4对应的分数50:
int mark = combined[4].getMark();
该方案没有类型转换开销,编译期即可完成类型校验,不存在类型转换异常风险,适配后续扩展需求。
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

