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
的名称。