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)
这就是Class
's的 JavadocgetName()
所说的:
字符串 java.lang.Class.getName()
以字符串形式返回由此 Class 对象表示的实体(类、接口、数组类、原始类型或 void)的名称。...如果这个类对象表示一类数组,则名称的内部形式由元素类型的名称组成,前面有一个或多个代表数组嵌套深度的“[”字符。元素类型名称的编码如下:
元素类型 编码 布尔值 Z 字节 乙 字符 C 类或接口 类名; 双倍的 D 漂浮 F 整数 一世 长 J 短的 秒
如您所见,B
已被 占用byte
,因此boolean
需要不同的字母。