如何解决Java中toString方法的实现
当我想打印 Boolean
(引用类型)的空数组时,结果为 output #1。但是当我想打印一个原始布尔类型的空数组时,output #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
}
}
解决方法
这就是 Class
的 getName()
的 Javadoc 所说的:
String java.lang.Class.getName()
返回实体的名称(类、接口、数组 类、原始类型或 void)由这个 Class 对象表示,作为一个 细绳。 ... 如果这个类对象代表一类数组,那么 名称的内部形式由元素类型的名称组成 前面有一个或多个代表深度的“[”字符 数组嵌套。元素类型名称的编码如下:
元素类型 | 编码 |
---|---|
布尔值 | Z |
字节 | B |
字符 | C |
类或接口 | Lclassname; |
双重 | D |
浮动 | F |
int | 我 |
长 | J |
短 | S |
如您所见,B
已被 byte
占用,因此 boolean
需要一个不同的字母。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。