getClass方法带有数组类型的Java

Dus*_*sen 17 java arrays class return-value

所以我遇到了一些奇怪的东西,我不知道它叫什么,所以我很难找到有关它的信息,因此我的问题在这里.

我遇到了一个问题,如果你创建一个任何类型的数组并在Java中调用此数组上的getClass,你将得到奇怪的回报.我想知道你为什么得到这个特定的回报及其含义.

代码示例如下:

byte[] me = new byte[1];
int[] me2 = new int[1];
double[] me3 = new double[1];
float[] me4 = new float[1];
String[] me5 = new String[1];
Integer[] me6 = new Integer[1];

System.out.println(me.getClass());                  
System.out.println(me2.getClass());                 
System.out.println(me3.getClass());                 
System.out.println(me4.getClass());                 
System.out.println(me5.getClass());
System.out.println(me6.getClass());
Run Code Online (Sandbox Code Playgroud)

输出是:

 class [B
 class [I
 class [D
 class [F
 class [Ljava.lang.String;
 class [Ljava.lang.Integer;
Run Code Online (Sandbox Code Playgroud)

emo*_*ory 22

Class 的toString方法调用Class的getName方法

以String形式返回此Class对象表示的实体名称(类,接口,数组类,基本类型或void).

如果此类对象表示不是数组类型的引用类型,则返回类的二进制名称,如Java语言规范第二版所指定.

如果此类对象表示基本类型或void,则返回的名称是一个String,它等于与基本类型或void相对应的Java语言关键字.

如果此类对象表示一个数组类,则名称的内部形式由元素类型的名称组成,前面有一个或多个'['字符,表示数组嵌套的深度.元素类型名称的编码如下:

 Element Type           Encoding
 boolean                Z
 byte                   B
 char                   C
 class or interface     Lclassname;
 double                 D
 float                  F
 int                    I
 long                   J
 short                  S 

类或接口名称classname是上面指定的类的二进制名称.

例子:

 String.class.getName()
     returns "java.lang.String"
 byte.class.getName()
     returns "byte"
 (new Object[3]).getClass().getName()
     returns "[Ljava.lang.Object;"
 (new int[3][4][5][6][7][8][9]).getClass().getName()
     returns "[[[[[[[I"
Run Code Online (Sandbox Code Playgroud)


irr*_*ble 5

这只是一些愚蠢的命名约定。如果它们更易于阅读class byte[],那就更好了:,class java.lang.Integert[][]