我得到这个当我打电话toString
我从一个函数调用接收的对象。 我知道对象的类型在这个字符串编码,但我不知道如何读它。
这是什么类型的编码叫什么名字?
我得到这个当我打电话toString
我从一个函数调用接收的对象。 我知道对象的类型在这个字符串编码,但我不知道如何读它。
这是什么类型的编码叫什么名字?
[Ljava.lang.Object;
是名称Object[].class
,所述java.lang.Class
代表类的阵列的Object
。
命名方案被记录在Class.getName()
如果该类对象表示引用类型不是数组类型,则返回的类的二进制名称,作为由Java语言规范中指定( §13.1 )。
如果该类对象表示一个基本类型或
void
,然后返回的名称是相应于原语类型或Java语言关键字void
。如果该类对象表示一类阵列的,则该名称的内部形式包括由一个或多个前面的元素类型的名称
'['
表示该数组嵌套的深度字符。 元素类型名的编码如下: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
从继承方法Object
如下,其被指定:
所述
toString
用于类方法Object
返回一个由其中的对象是一个实例,该符号字符`的类的名称的字符串@”,并且对象的哈希码的无符号的十六进制表示。 换句话说,此方法返回一个字符串等于的值:getClass().getName() + '@' + Integer.toHexString(hashCode())
注意 :你不能依靠toString()
任意对象的按照上面的说明,因为他们可以(通常) @Override
它返回别的东西。 检查的任意对象的类型的更可靠的方法是调用getClass()
就可以了(一个final
从继承的方法Object
),然后反射返回的上Class
对象。 理想的情况是,该API应该已经设计成反射是没有必要的(见有效的Java第二版,第53项:不想界面反射 )。
toString
数组 java.util.Arrays
提供toString
重载基本数组和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
执行由它们的元素,许多其它的排列相关的实用方法中阵列相等比较。