Java 打印字符串数组

Java 打印字符串数组,java,arrays,string,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 p

这是我的密码:

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]  

magic1
magic2
之间有什么区别

它基本上是一个定制的
toString
,使输出变得漂亮

您在第一个
toString
中看到的是内存地址。原因是变量名只是一个内存地址(也称为引用)

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

打印出:

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

读这篇文章。我已经在这里复制了必要的信息

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

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

public String toString()
返回对象的字符串表示形式。通常,toString方法返回一个“文本表示”此对象的字符串。结果应该是一个简洁但信息丰富的表示,便于一个人阅读。建议所有子类重写此方法。 类对象的toString方法返回一个字符串,该字符串由对象作为实例的类的名称、at符号字符“@”和对象哈希代码的无符号十六进制表示形式组成。换句话说,此方法返回一个等于以下值的字符串:

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

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

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

getClass().getName() + '@' + Integer.toHexString(hashCode())
getClass().getName() + '@' + Integer.toHexString(hashCode())
就你而言

  • getClass().getName()
    返回
    [Ljava.lang.String
    ,意思是
    • 一维数组(因为只有一个
      [
    • 全名为
      java.lang.String
  • Integer.toHexString(hashCode())
    返回类似于
    1db9742
    的内容,这是由
    hashCode()
    方法返回的整数的十六进制形式
现在,如果您查看
数组的代码,那么toString(Object[]array)
String[]
被认为是
Object[]

公共静态toString([]a){
如果(a==null)
返回“null”;
int-iMax=a.length-1;
如果(iMax=-1)
返回“[]”;
b=new();
如果(i==0;i++){
b.(String.(a[i]);
如果(i==iMax)
返回b(']);
b.(“,”;
}
}


您将看到,它的目的是从该数组的内容创建字符串生成。它通过迭代所有元素并将其字符串表示形式添加到StringBuilder来完成此操作,然后使用StringBuilder创建将返回的字符串。

magic1
是默认的toString()数组的输出。
magic2
是toString()的输出方法,该方法为您获取所有元素。第一个方法是打印array magic的标识哈希代码。可能类似于String@548543fdfds。只是他没有问如何打印数组。我的问题是:magic1正在引用一个内存位置并打印它。那么magic2为什么不也这样做呢事情?因为
array.toString
toString()
的方法不同。它们是不同的方法,具有不同的用途,可以做不同的事情。谢谢你的回答。我的问题是,它们的输出不应该相同吗?那么为什么magic2不打印引用?