问题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?
答案 0 :(得分:2)
您的第二个代码段与您的第一个代码段不同。相反,你正在打印
您应该将代码段的最后一行更改为:
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