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

一维数组tmp1与二维数组tmp2输出结果一致的原因探究

问题:一维数组与二维数组输出结果相同的原因

以下是出现问题的Java代码:

package hosein.testFile;

import java.util.*;
import java.io.*;

/**
*
* @author hosein
*/
public class Main2 implements Serializable {

   /**
    * @param args the command line arguments
    */
   public static void main(String[] args) {
       // part 1 ----------------------------------------------------
       ArrayList s = new ArrayList<>();
       ArrayList<String> d = new ArrayList<>();
       ArrayList<String> b = new ArrayList<>();
       d.add("a");
       d.add("b");

       b.add("c");
       b.add("d");
       b.add("e");

       Collections.addAll(s, d, b);
       Object[] tmp1 = s.toArray();
       System.out.println("tmp1 :" + Arrays.toString(tmp1));
       // part 2 ----------------------------------------------------
       Object[][] tmp2 = new Object[2][];
       tmp2[0] = new Object[2];
       tmp2[1] = new Object[3];
       Object[] dTmp = d.toArray();
       Object[] bTmp = b.toArray();
       for (int i = 0; i < tmp2.length; i++) {
           for (int j = 0; j < tmp2[i].length; j++) {
               if (i == 0) {
                   tmp2[i][j] = dTmp[j];
               }
               if (i == 1) {
                   tmp2[i][j] = bTmp[j];
               }
           }
       }
       System.out.println("tmp2 :" + Arrays.toString(tmp1));

   }

}

运行后输出结果如下:

run:
tmp1 :[[a, b], [c, d, e]]
tmp2 :[[a, b], [c, d, e]]
BUILD SUCCESSFUL (total time: 0 seconds)

原因分析

  1. 输出变量写错是直接原因:
    观察代码中输出tmp2的语句:System.out.println("tmp2 :" + Arrays.toString(tmp1));,这里传入Arrays.toString的参数是tmp1而非tmp2,本质上两次输出的都是同一个一维数组tmp1的内容,结果自然完全相同。

  2. 补充:若输出tmp2,视觉上也会类似的原因:
    假设修正语句为Arrays.toString(tmp2),输出结果依然会是[[a, b], [c, d, e]]。这是因为Arrays.toString处理数组时,会对数组中的每个元素调用其toString方法:

    • 对于一维数组tmp1,它的元素是ArrayList对象,ArrayList的toString会输出内部元素组成的字符串(如[a, b]);
    • 对于二维数组tmp2,它本质是“元素为一维数组的一维数组”,Arrays.toString会对每个一维数组元素调用数组的toString方法,而数组的toString默认输出格式也是[元素1, 元素2,...],所以视觉上和tmp1的输出一致。但两者的数组结构完全不同:tmp1是Object[],每个元素是ArrayList;tmp2是Object[][],每个元素是Object[]。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 16:25:55