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

Java多维数组重分配疑问:为何B、E选项无编译运行问题?

Java多维数组类型匹配问题解析

先看给定的Java代码:

double myArray [][][] = new double [3][][];
double d = 100.0;
double [][] myArray2 = new double [1][1];

问题

以下哪两项不会导致编译或运行时错误?(选2项)
选项:

  • A. myArray [0] = d;
  • B. myArray [0] = myArray2;
  • C. myArray [0] = myArray2 [0];
  • D. myArray2 [1][1] = d;
  • E. myArray2 = myArray [0]

已知正确答案是B和E,下面逐个分析选项,并重点解释二者维度匹配的核心逻辑:


选项逐一分析

  • 选项A:myArray[0] 的类型是 double[][](二维数组),而 d 是 double 基本类型,类型完全不匹配,直接编译报错。
  • 选项B:myArray 是三维数组,它的每个元素(比如 myArray[0])本质是一个 double[][] 类型的二维数组引用;myArray2 本身就是 double[][] 类型的二维数组,二者类型完全一致,赋值操作合法,无编译或运行时错误。
  • 选项C:myArray2[0] 的类型是 double[](一维数组),但 myArray[0] 需要的是 double[][](二维数组),类型不匹配,编译报错。
  • 选项D:myArray2 是 new double[1][1],数组索引从0开始,myArray2[1] 已经超出了数组的有效索引范围(仅索引0可用),运行时会抛出数组越界异常。
  • 选项E:myArray[0] 的类型是 double[][](二维数组),myArray2 的类型同样是 double[][](二维数组),类型匹配,赋值合法。虽然此时 myArray[0] 还未初始化(仅声明了三维数组的第一层空间,第二层未分配),但Java允许将未初始化的同类型数组引用赋值给变量,赋值操作本身不会报错(后续若未初始化就使用 myArray2 才会出问题,但赋值步骤是合规的)。

核心维度匹配逻辑

Java的多维数组本质是数组的数组:

  • double[][][] 代表“存储二维数组的数组”,所以它的每一个元素(比如 myArray[0]),都是一个 double[][] 类型的二维数组引用。
  • double[][] 代表“存储一维数组的数组”,也就是标准的二维数组。

因此 myArray[0] 和 myArray2 属于完全相同的数组类型,自然可以互相赋值,这就是B、E选项合法的根本原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 06:24:56