java - 为什么我需要重铸从 Java 中的对象数组中访问的整数数组?
问题描述
我有以下代码创建一个对象数组并将两个整数数组传递给它。然后,我想将另一个整数数组变量设置为对象数组中的一个数组。
但是,除非我执行 (int[]) 类型转换步骤,否则我会收到错误消息。为什么我需要执行此重铸?我会假设对象内的数组是 int[] ,因为它们就是这样传递的。
public class test {
public static void main(String[] args){
int[] arr1 = {1,2,3,4};
int[] arr2 = {4,5,6};
Object[] x = {arr1, arr2};
int[] left =(int[]) x[0];
for (int element : left){
System.out.println(element);
}
}
}
解决方案
这段代码应该回答你的问题
public static void main(String[] args) {
int[] arr1 = { 1, 2, 3, 4 };
String[] arr2 = { "a", "b", "c" };
Object[] x = { arr1, arr2 };
int[] left = (int[]) x[0];
for (int element : left) {
System.out.println(element);
}
}
当您将 arr1、arr2 推入另一个 Object[] 类型的数组时,编译器不会假定 Object[] x 数组中的元素类型,因为它可以接受任何类型的数组。这就是为什么编译器会强制你转换 Object[] 数组 x 中使用的元素。
推荐阅读
- javascript - 关于反应上下文和重新渲染组件的快速问题
- javascript - 如何在 Angular Material 11 的 MatSlideToggle 中使用图标?
- html - CSS 高度属性不适用于 h1 元素
- php - 从数组创建分页
- javascript - 如何导航和设置角度下拉列表中检查的值
- javascript - 如何在编辑时隐藏输入字段的中间部分?
- botframework - 通过机器人框架将气泡发送到团队会议中
- typescript - 在 TypeScript 中动态导入 SCSS
- php - 每次在 Laravel 上离开页面时调用一个方法
- javascript - 为什么某些 iPhone 设备编译 javascript new Date() 的方式不同?