一个Java数组对象不能被直接打印到控制台。
当你试图在Java中使用println() 方法来打印一个数组时,对象的哈希代码将被打印出来:
public static void main(String[] args) {
int[] numbers = {1, 2, 3, 4};
System.out.println(numbers);
// [I@1f32e575
}
为了将数组的内容打印到控制台,你需要从java.util.Arrays 类中调用Arrays.toString() 方法。
把你想打印的数组作为参数传给Arrays.toString() 方法,如下图所示:
import java.util.Arrays;
public static void main(String[] args) {
int[] numbers = {1, 2, 3, 4};
System.out.println(Arrays.toString(numbers));
// [1, 2, 3, 4]
}
然而,请记住,Arrays.toString() 方法不能用来打印多维数组。即使是一个二维数组也会导致该方法打印出哈希代码。
你需要调用toString() 方法,而不是Arrays.deepToString() 方法:
import java.util.Arrays;
public static void main(String[] args) {
int[][] numbers = {{1, 2}, {3, 4}};
System.out.println(Arrays.toString(numbers));
// [[I@1f32e575, [I@279f2327]
System.out.println(Arrays.deepToString(numbers));
// [[1, 2], [3, 4]]
}
deepToString() 方法会将一个多维数组转换为其字符串表示,没有问题。
你需要对一维数组使用toString() 方法的原因是,deepToString() 方法在一维数组上使用时将会出现错误。
使用for循环打印一个Java数组
另外,你也可以使用for 循环来打印一个Java数组,如下所示:
public static void main(String[] args) {
String[] myArr = {"John", "Jane", "Doe"};
for (String element: array) {
System.out.println(element);
}
}
上述程序的输出将如下:
John
Jane
Doe
当使用for 循环时,数组的每个元素将被打印在单独的一行,并且没有环绕元素的数组[] 的括号符号。
对于多维数组,你需要使用多个for 循环,与你的数组中的维度一样多。
对于一个二维数组,你需要两个for 循环,如下图所示:
public static void main(String[] args) {
String[][] myArr = {{"John", "Doe"}, {"Jane", "Doe"}};
for (String[] elements: myArr) {
for(String element: elements){
System.out.println(element);
}
}
}
// Output:
// John
// Doe
// Jane
// Doe
因为第一个循环将找到一个String 类型的数组,String[] 类型被用来输入elements 变量。
第二个for 循环将是存储数组元素的地方,所以你在这第二个循环中调用println() 。
对于其他数组类型,你只需要在for 循环内匹配类型就可以了:
public static void main(String[] args) {
int[][] myArr = {{1, 2}, {3, 4}};
for (int[] elements: myArr) {
for(int element: elements){
System.out.println(element);
}
}
}
// Output:
// 1
// 2
// 3
// 4
现在你已经学会了如何在Java中打印一个数组,包括单维数组和多维数组。
干得好!👍