在Java中,数组不会重写toString(),因此如果您尝试直接打印一个,则会得到数组的className+“@”+hashCode的十六进制,如Object.toString()所定义:

int[] intArray = new int[] {1, 2, 3, 4, 5};
System.out.println(intArray); // Prints something like '[I@3343c8b3'

但通常情况下,我们会想要更像[1,2,3,4,5]的东西。最简单的方法是什么?以下是一些输入和输出示例:

// Array of primitives:
int[] intArray = new int[] {1, 2, 3, 4, 5};
// Output: [1, 2, 3, 4, 5]

// Array of object references:
String[] strArray = new String[] {"John", "Mary", "Bob"};
// Output: [John, Mary, Bob]

当前回答

这被标记为用于打印字节[]的副本。注意:对于字节数组,可能有其他合适的方法。

如果它包含ISO-8859-1字符,则可以将其打印为字符串。

String s = new String(bytes, StandardChars.ISO_8559);
System.out.println(s);
// to reverse
byte[] bytes2 = s.getBytes(StandardChars.ISO_8559);

或者如果它包含UTF-8字符串

String s = new String(bytes, StandardChars.UTF_8);
System.out.println(s);
// to reverse
byte[] bytes2 = s.getBytes(StandardChars.UTF_8);

或者如果您想将其打印为十六进制。

String s = DatatypeConverter.printHexBinary(bytes);
System.out.println(s);
// to reverse
byte[] bytes2 = DatatypeConverter.parseHexBinary(s);

或者如果要将其打印为base64。

String s = DatatypeConverter.printBase64Binary(bytes);
System.out.println(s);
// to reverse
byte[] bytes2 = DatatypeConverter.parseBase64Binary(s);

或者如果要打印带符号字节值的数组

String s = Arrays.toString(bytes);
System.out.println(s);
// to reverse
String[] split = s.substring(1, s.length() - 1).split(", ");
byte[] bytes2 = new byte[split.length];
for (int i = 0; i < bytes2.length; i++)
    bytes2[i] = Byte.parseByte(split[i]);

或者如果要打印无符号字节值数组

String s = Arrays.toString(
               IntStream.range(0, bytes.length).map(i -> bytes[i] & 0xFF).toArray());
System.out.println(s);
// to reverse
String[] split = s.substring(1, s.length() - 1).split(", ");
byte[] bytes2 = new byte[split.length];
for (int i = 0; i < bytes2.length; i++)
    bytes2[i] = (byte) Integer.parseInt(split[i]); // might need a range check.

其他回答

在我看来,使用正则for循环是打印数组的最简单方法。这里有一个基于intArray的示例代码

for (int i = 0; i < intArray.length; i++) {
   System.out.print(intArray[i] + ", ");
}

它的输出与您的一样1, 2, 3, 4, 5

for(int n: someArray) {
    System.out.println(n+" ");
}

从Java5开始,您可以对数组中的数组使用Arrays.toString(arr)或Arrays.deepToString(arr)。注意,Object[]版本对数组中的每个对象调用.toString()。输出甚至按照您要求的方式进行装饰。

示例:

简单阵列:String[]数组=新String[]{“John”,“Mary”,“Bob”};System.out.println(数组.toString(数组));输出:[约翰、玛丽、鲍勃]嵌套数组:String[][]deepArray=新String[][]{{“John”,“Mary”},{“Alice”,“Bob”}};//产生不希望的输出:System.out.println(Arrays.toString(deepArray));//给出所需输出:System.out.println(Array.deepToString(deepArray));输出:[[Ljava.lang.String;@106d69c,[Ljava.lang.String;@52e922][[约翰,玛丽],[爱丽丝,鲍勃]]双阵列:double[]doubleArray={7.0,9.0,5.0,1.0,3.0};System.out.println(Arrays.toString(doubleArray));输出:[7.0, 9.0, 5.0, 1.0, 3.0 ]int数组:int[]intArray={7,9,5,1,3};System.out.println(数组.toString(intArray));输出:[7, 9, 5, 1, 3 ]

在Java中打印数组的不同方法:

简单的方式List<String>List=newArrayList<String>();list.add(“一”);list.add(“两个”);list.add(“三”);list.add(“四”);//在控制台中打印列表System.out.println(列表);

输出:[一、二、三、四]

使用toString()String[]数组=新String[]{“一”,“二”,“三”,“四”};System.out.println(数组.toString(数组));

输出:[一、二、三、四]

打印阵列阵列String[]arr1=新String[]{“Fifth”,“Sixth”};String[]arr2=new String[]{“Seventh”,“Eight”};String[][]arrayOfArray=新String[][]{arr1,arr2};System.out.println(arrayOfArray);System.out.println(Arrays.toString(arrayOfArray));System.out.println(Array.deepToString(arrayOfArray));

输出:[[Ljava.lang.String;@1ad086a[[Ljava.lang.String,@10385c1,[Ljava.lang.String;@42719c][[第五,第六],[第七,第八]]

资源:访问阵列

如果您正在运行jdk 8。

public static void print(int[] array) {
    StringJoiner joiner = new StringJoiner(",", "[", "]");
    Arrays.stream(array).forEach(element -> joiner.add(element + ""));
    System.out.println(joiner.toString());
}


int[] array = new int[]{7, 3, 5, 1, 3};
print(array);

输出:

[7,3,5,1,3]