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
相关产品推荐
相关产品推荐

