Java数组的最简打印方法
技术背景
在Java中,数组没有重写toString()
方法。因此,若直接打印数组,会得到类似className + '@' + 数组哈希码的十六进制
的输出,如[I@3343c8b3
。然而,通常我们期望的输出是类似[1, 2, 3, 4, 5]
这样的格式。下面将介绍多种打印Java数组的方法。
实现步骤
1. 使用Arrays.toString()
和Arrays.deepToString()
(Java 5及以上)
Arrays.toString()
:用于打印一维数组。Arrays.deepToString()
:用于打印多维数组。
示例代码:
1 2 3 4 5 6 7 8 9 10 11 12 13
| import java.util.Arrays;
public class ArrayPrintExample { public static void main(String[] args) { String[] array = new String[] {"John", "Mary", "Bob"}; System.out.println(Arrays.toString(array));
String[][] deepArray = new String[][] {{"John", "Mary"}, {"Alice", "Bob"}}; System.out.println(Arrays.deepToString(deepArray)); } }
JAVA
|
2. 使用Java 8的Stream API和Lambda表达式
可以使用Arrays.stream()
方法结合forEach
和方法引用System.out::println
来打印数组元素。
示例代码:
1 2 3 4 5 6 7 8 9 10 11
| import java.util.Arrays;
public class ArrayPrintStreamExample { public static void main(String[] args) { int[] intArray = new int[] {1, 2, 3, 4, 5}; Arrays.stream(intArray).forEach(System.out::println);
String[] strArray = new String[] {"John", "Mary", "Bob"}; Arrays.stream(strArray).forEach(System.out::println); } }
JAVA
|
3. 使用String.join()
(Java 8及以上)
String.join()
方法可以将数组元素连接成一个字符串,用指定的分隔符分隔。
示例代码:
1 2 3 4 5 6 7
| public class ArrayPrintJoinExample { public static void main(String[] args) { String[] greeting = {"Hey", "there", "amigo!"}; String delimiter = " "; System.out.println(String.join(delimiter, greeting)); } }
JAVA
|
4. 使用普通for循环或增强for循环
这是一种基本的方法,通过遍历数组元素并打印。
示例代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| public class ArrayPrintLoopExample { public static void main(String[] args) { int[] intArray = new int[] {1, 2, 3, 4, 5};
for (int i = 0; i < intArray.length; i++) { System.out.print(intArray[i] + ", "); } System.out.println();
for (int num : intArray) { System.out.print(num + ", "); } System.out.println(); } }
JAVA
|
核心代码
使用Arrays.toString()
打印一维数组
1 2 3 4
| import java.util.Arrays;
int[] intArray = { 7, 9, 5, 1, 3 }; System.out.println(Arrays.toString(intArray));
JAVA
|
使用Arrays.deepToString()
打印多维数组
1 2 3 4
| import java.util.Arrays;
String[][] deepArray = new String[][] {{"John", "Mary"}, {"Alice", "Bob"}}; System.out.println(Arrays.deepToString(deepArray));
JAVA
|
使用Java 8 Stream API打印数组
1 2 3 4
| import java.util.Arrays;
int[] intArray = new int[] {1, 2, 3, 4, 5}; Arrays.stream(intArray).forEach(System.out::println);
JAVA
|
使用String.join()
连接数组元素
1 2 3
| String[] greeting = {"Hey", "there", "amigo!"}; String delimiter = " "; System.out.println(String.join(delimiter, greeting));
JAVA
|
最佳实践
- 对于一维数组,优先使用
Arrays.toString()
,代码简洁且能满足大部分需求。 - 对于多维数组,使用
Arrays.deepToString()
。 - 如果需要自定义输出格式或处理数组元素,可以使用Java 8的Stream API和Lambda表达式。
- 若只需简单地将数组元素连接成一个字符串,使用
String.join()
。
常见问题
1. Arrays.deepToString()
不支持基本类型的多维数组
Arrays.deepToString()
接受的是Object []
类型的参数,因此对于基本类型的多维数组,需要使用包装类数组。
2. 普通for循环打印数组时,末尾会多一个分隔符
可以在循环中添加条件判断,避免最后一个元素后面添加分隔符。
示例代码:
1 2 3 4 5 6 7
| int[] intArray = { 7, 9, 5, 1, 3 }; for (int i = 0; i < intArray.length; i++) { System.out.print(intArray[i]); if (i < intArray.length - 1) { System.out.print(", "); } }
JAVA
|
3. 数组元素为自定义对象时,打印结果可能不符合预期
需要确保自定义对象重写了toString()
方法,以输出期望的格式。