打印字符串数组

时间:2015-01-15 00:19:59

标签: java arrays string

这是我的代码:

String[] magic = {"stick", "hat", "witch"};
String magic1 = magic.toString();
String magic2 = Arrays.toString(magic);

System.out.println(magic1);         // this is printing a memory location
System.out.println(magic2);         // this one prints: [stick, hat, witch]  

magic1magic2之间有什么区别?

3 个答案:

答案 0 :(得分:1)

数组是对象,但它们不会更改(覆盖)其toString()方法,这意味着它们使用默认值,继承自Object。如果您阅读documentation of this method,您会发现:

  

类Object的toString方法返回一个字符串,该字符串由对象为实例的类的名称,符号字符“@'”以及哈希代码的无符号十六进制表示形式组成。宾语。换句话说,此方法返回一个等于值的字符串:

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

在你的情况下

  • getClass().getName()返回[Ljava.lang.String,这意味着
    • 一维数组(因为只有一个[
    • 全名为java.lang.String 的类型的
  • Integer.toHexString(hashCode())返回类似1db9742的内容,它是hashCode()方法返回的整数的十六进制形式。

现在,如果您查看Arrays.toString(Object[] array)的代码(String[]被视为Object[]

4531  public static String toString(Object[] a) {
4532 if (a == null)
4533 return "null";
4535 int iMax = a.length - 1;
4536 if (iMax == -1)
4537 return "[]";
4539 StringBuilder b = new StringBuilder();
4540 b.append('[');
4541 for (int i = 0; ; i++) {
4542 b.append(String.valueOf(a[i]));
4543 if (i == iMax)
4544 return b.append(']').toString();
4545 b.append(", ");
4546 }
4547 }

你会发现它的目的是从这个数组的内容创建字符串构建。它通过遍历所有元素并将其字符串表示添加到StringBuilder来完成此操作,然后使用StringBuilder创建将返回的String。

答案 1 :(得分:0)

它基本上是一个定制的toString,使输出相当漂亮。

您在第一个 toString中看到的是内存地址。原因是变量名只是 - 内存地址(又名参考)。

每个类都继承toString,并且可以实现自己的。

See Arrays class API

String[] names = {"Bob", "Dad", "Mom"};
String names1 = names.toString();
String names2 = Arrays.toString(names);

System.out.println(names1 );         
System.out.println(names2 );         

打印出来:

[Ljava.lang.String;@1034bb5
[Bob, Dad, Mom]

答案 2 :(得分:0)

阅读doumentation。我在这里复制了必要的信息。

public static String toString(Object[] a)

返回指定数组内容的字符串表示形式。如果数组包含其他数组作为元素,则它们将从Object继承的Object.toString()方法转换为字符串,该方法描述其身份而不是其内容。

此方法返回的值等于Arrays.asList(a).toString()返回的值,除非a为null,在这种情况下" null"退回。

public String toString()

返回对象的字符串表示。通常,toString方法返回一个"文本表示"的字符串。这个对象。结果应该是一个简洁但信息丰富的表示,便于人们阅读。建议所有子类都重写此方法。 类Object的toString方法返回一个字符串,该字符串由对象为实例的类的名称,符号字符“@'”和哈希码的无符号十六进制表示组成。对象即可。换句话说,此方法返回一个等于值的字符串:

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