[Ljava.lang.Object;
的名字是
Object[].class
, the
java.lang.Class
表示数组的类
Object
.
命名方案记录在
Class.getName()
:
如果此类对象表示不是数组类型的引用类型,则返回该类的二进制名,如Java语言规范所指定的那样。
§13.1
)
如果该类对象表示基元类型或
void
然后,返回的名称是对应于原始类型的Java语言关键字。
无效
.
如果这个类对象表示一个数组类,那么名称的内部形式由前面有一个或多个元素类型的名称组成。
'['
表示数组嵌套深度的字符。
元素类型名称的编码如下:
Element Type Encoding
boolean Z
byte B
char C
double D
float F
int I
long J
short S
class or interface Lclassname;
你的是名单上最后一个。以下是一些例子:
// xxxxx varies
System.out.println(new int[0][0][7]); // [[[I@xxxxx
System.out.println(new String[4][2]); // [[Ljava.lang.String;@xxxxx
System.out.println(new boolean[256]); // [Z@xxxxx
为什么
toString()
数组上的方法返回
String
这种格式是因为数组
@Override
继承自的方法
对象
,具体如下:
这个
toString
method for class
Object
返回一个字符串,该字符串由对象是其实例的类的名称、at符号字符“@”和对象哈希代码的无符号十六进制表示形式组成。换句话说,此方法返回一个等于以下值的字符串:
getClass().getName() + '@' + Integer.toHexString(hashCode())
注释
:您不能依赖
托斯特林()
任何符合上述规范的任意对象,因为它们可以(并且通常可以)
@重写
它是为了归还其他东西。检查任意对象类型的更可靠方法是调用
getClass()
关于它(A)
final
方法继承自
对象
然后
reflecting
归还
Class
对象。不过,理想情况下,API的设计应该使反射不必要(请参见
有效Java第二版,项目53:喜欢界面反射
)
关于一个更“有用的”
弦线
对于数组
java.util.Arrays
提供
弦线
基元数组和的重载
Object[]
. 也有
deepToString
可能需要用于嵌套数组。
以下是一些例子:
int[] nums = { 1, 2, 3 };
System.out.println(nums);
// [I@xxxxx
System.out.println(Arrays.toString(nums));
// [1, 2, 3]
int[][] table = {
{ 1, },
{ 2, 3, },
{ 4, 5, 6, },
};
System.out.println(Arrays.toString(table));
// [[I@xxxxx, [I@yyyyy, [I@zzzzz]
System.out.println(Arrays.deepToString(table));
// [[1], [2, 3], [4, 5, 6]]
也有
Arrays.equals
和
Arrays.deepEquals
通过它们的元素以及许多与数组相关的实用方法执行数组相等比较的方法。
相关问题