首页 > 解决方案 > Java中toString方法的实现

问题描述

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

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

  }
}

标签: javaarraysreferencetostringprimitive-types

解决方案


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

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

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

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

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


推荐阅读