toString方法在Java中的实现

toString方法在Java中的实现,java,arrays,reference,tostring,primitive-types,Java,Arrays,Reference,Tostring,Primitive Types,当我想要打印布尔值的空数组时(参考类型),结果是输出#1。但是,当我想要打印一个基本布尔类型的空数组时,结果是output#2。我知道对象类中的toString()方法默认正在运行。此方法的默认实现如下所示: this.getClass().getName() + "@" + Integer.toHexString(this.hashCode()); 但有趣的是,为什么Z写在原语类型的输出中,而int是I public class ToStringApp { publi

当我想要打印
布尔值的空数组时(参考类型),结果是输出#1。但是,当我想要打印一个基本布尔类型的空数组时,结果是output#2。我知道
对象
类中的
toString()
方法默认正在运行。此方法的默认实现如下所示:

this.getClass().getName() + "@" + Integer.toHexString(this.hashCode());
但有趣的是,为什么Z写在原语类型的输出中,而int是I

public class ToStringApp {
  public static void main(String[] args) {

    Boolean[] refs = new Boolean[1];
    System.out.println(refs);         
    // output #1: [Ljava.lang.Boolean;@3764951d

    boolean[] prims = new boolean[1];
    System.out.println(prims);        
    // output #2: [Z@4b1210ee

    int[] ints = new int[0];
    System.out.println(ints);
    // output #3: [I@4d7e1886

  }
}

这就是
Class
getName()
的Javadoc所说的:

字符串java.lang.Class.getName()

返回实体(类、接口、数组)的名称 类、基元类型或void)表示为 一串 ... 如果该类对象表示一类数组,则 名称的内部形式由元素类型的名称组成 前面有一个或多个“[”字符,表示 数组嵌套。元素类型名称的编码如下:

this.getClass().getName() + "@" + Integer.toHexString(this.hashCode());
元素类型 编码 布尔值 Z 字节 B 烧焦 C 类或接口 Lclassname; 双重的 D 浮动 F int I 长的 J 短的 s
这就是
Class
getName()
的Javadoc所说的:

字符串java.lang.Class.getName()

返回实体(类、接口、数组)的名称 类、基元类型或void)表示为 一串 ... 如果该类对象表示一类数组,则 名称的内部形式由元素类型的名称组成 前面有一个或多个“[”字符,表示 数组嵌套。元素类型名称的编码如下:

this.getClass().getName() + "@" + Integer.toHexString(this.hashCode());
元素类型 编码 布尔值 Z 字节 B 烧焦 C 类或接口 Lclassname; 双重的 D 浮动 F int I 长的 J 短的 s
你的问题是什么?为什么Z写在布尔(基本类型)数组的输出中,而int类型的是I?因为
[Z
boolean[].class
的名称,
[I
int[].class
的名称。你的问题是什么?为什么Z写在布尔(基本类型)的输出中然而,int类型的数组是I?,因为
[Z
布尔[].class
的名称,
[I
int[].class
的名称。