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

Java中int[]、String[]、char[]数组打印输出差异原因咨询

为什么Java中不同方式打印数组输出结果不同?

刚学Java的话,搞懂这个问题能帮你理解Java里数组的本质,咱们一步步说:

1. 直接打印数组对象的本质

你直接写System.out.println(new int[0]);这种代码时,其实是在打印数组这个对象本身的标识,而不是数组里的元素。

Java里所有数组都是Object类的子类,直接打印时会调用Object类的默认toString()方法,这个方法的逻辑是:

getClass().getName() + "@" + Integer.toHexString(hashCode())

所以你看到的类似[I@6d03e736的输出拆解一下:

  • [I:[代表这是一维数组,I是Java给int类型分配的标记(如果是String数组会显示[Ljava.lang.String;)
  • @后面的一串十六进制数:是这个数组对象的哈希码,用来区分内存里的不同对象

哪怕是空数组(长度为0),它也是一个正经的对象,所以直接打印就会输出这个格式。

2. 用Arrays.toString()打印的逻辑

如果用java.util.Arrays.toString(new int[0]),输出会是[],这是因为这个方法是Java专门为了展示数组元素做的工具方法:

  • 它会遍历数组里的每一个元素,把元素转成字符串
  • 然后用[]把所有元素包起来,元素之间用逗号分隔
  • 空数组的话,遍历不到任何元素,就直接输出[]

3. 可能的第三种打印方式:手动遍历

要是你自己写循环遍历数组打印,比如:

int[] emptyArr = new int[0];
System.out.print("[");
for (int num : emptyArr) {
    System.out.print(num + ", ");
}
System.out.println("]");

空数组的话循环根本不会执行,最后输出的也是[](当然你要是没处理好可能会输出[, ],这就是代码逻辑的问题了)

举个完整代码例子对比

import java.util.Arrays;

public class ArrayPrintTest {
    public static void main(String[] args) {
        int[] emptyArray = new int[0];
        
        // 直接打印数组对象
        System.out.println("直接打印数组:" + emptyArray);
        // 输出:直接打印数组:[I@6d03e736
        
        // 用Arrays工具类打印
        System.out.println("Arrays.toString打印:" + Arrays.toString(emptyArray));
        // 输出:Arrays.toString打印:[]
        
        // 手动遍历打印
        System.out.print("手动遍历打印:[");
        for (int i = 0; i < emptyArray.length; i++) {
            if (i != 0) System.out.print(", ");
            System.out.print(emptyArray[i]);
        }
        System.out.println("]");
        // 输出:手动遍历打印:[]
    }
}

说白了,三种打印输出不同的核心原因就是:你打印的东西不一样——一个是数组对象本身的标识,一个是数组内部的元素集合,还有一个是你自己控制的元素展示格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 05:41:15