什么是int数组的类?

时间:2017-06-10 06:27:35

标签: java class object

问题1: 我怀疑如果我们只能创建类的对象,那么我们如何能够创建原始数据类型的对象,如int,char等。

Problem2: 现在假设Ankit是一个类,如果我写的话

Ankit a=new Ankit();
System.out.println(a.getClass().getName());

它会给我一个类的名字。如果我写

System.out.println(Ankit.class);

然后它也会给出类名。但如果我写

int ar[]=new int[10];
System.out.println(ar.getClass().getName());
System.out.println(int.class); 

然后我输出为:

[我和int

为什么这样?在这里我也应该获得与int的类名相同的输出,然后为什么不同的输出和什么是[I?

2 个答案:

答案 0 :(得分:2)

您的第二个代码段与您的第一个代码段不同。相反,你正在打印

  1. int数组的类名
  2. 基元int的类名
  3. 您应该将代码段的最后一行更改为:

    System.out.println(int[].class); 
    

    使其打印与上面的行相同。

    关于问题的第二部分:这就是java如何表示数组的类名。

    • int的一维数组是[I
    • int的二维数组是[[I
    • 您的班级Ankit的一维数组是[LAnkit;(您可以使用System.out.println(Ankit[].class);观察到这一点)

答案 1 :(得分:1)

数组与toString实现略有不同。

以下是您看到的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