Java中toString方法的实现

elv*_*e14 1 java arrays reference tostring primitive-types

当我想打印Boolean(引用类型)的空数组时,结果作为输出 #1。但是当我想打印一个原始布尔类型的空数组时,输出 #2就是结果。我知道类中的toString()方法Object默认运行。该方法的默认实现如下:

this.getClass().getName() + "@" + Integer.toHexString(this.hashCode());
Run Code Online (Sandbox Code Playgroud)

但有趣的是,为什么 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

  }
}
Run Code Online (Sandbox Code Playgroud)

Era*_*ran 5

这就是Class's的 JavadocgetName()所说的:

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

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

元素类型 编码
布尔值 Z
字节
字符 C
类或接口 类名;
双倍的 D
漂浮 F
整数 一世
J
短的

如您所见,B已被 占用byte,因此boolean需要不同的字母。