2017-08-02 119 views
2

我正在阅读一本关于Java的书,它们似乎可以互换地使用“原始类”和“原始数据类型”这两个术语。基元类和基元数据类型有什么区别?

两者有什么区别?我明白Integer是一个包装类,人们将int引用为基本数据类型。那么它也是一个原始的类?

+3

'primitive class'是'primitive type'的包装类。所以对于'int'你有'Integer',对于'double'你有'Double'等等 – Lino

+0

听起来有点矛盾... – assylias

+3

我不认为我以前听过“原始类”,并且如果我这样做,我的第一个想法是“嗯?”据我所知,JLS和官方的Java教程并没有把任何东西称为原始类。正如@Lino写道,你的书_probably_意味着大多数人(和JLS)称之为包装类。出于好奇, – yshavit

回答

3

他们在这里混淆他们的白话。

原始数据类型是而不是的一个对象。 int,float,double,long, short,booleanchar是原始数据类型的例子。你不能在这些数据类型上调用方法,并且它们没有很大的内存占用量,这是它们与类的显着差异。

其他所有是一个类(或接口和枚举类的类)。几乎所有以大写字母开头的东西,如String,Integer都是类。数组也可以分类为非原语,即使它们可能拥有它们。 int[]不是原始类型,但它保存原语。

,可以逼真地来接近将是包装类,as explained by the JLS,但即使这样,他们仍然,而不是原语的唯一的事情。

+1

我认为说一切都是“类型”(包括类,数组类型,数据类型等)会更准确 – Kapep

+0

@Kapep:如果我没有记错,可以通过Type类型来反射地访问原语。或类型类,所以我会犹豫超载这个术语。将这些视为类不容易将来混淆。 – Makoto

+0

我必须纠正自己,JLS说有两种基本类型:PrimitiveType和ReferenceType。所以这会让所有其他的都成为ReferenceType。但无论如何,我同意你的看法,可能更有帮助,并且将它称为类或类就不那么容易了。 – Kapep

4

原型类在反射API的上下文中具有特殊含义:当您需要检索一个采用基本类型参​​数的方法时,需要与该基元类型对应的基元类对象。

这是很重要的,如果你必须在采取原语和采取包装重载重载之间的区别:

void someMethod(int n); 
void someMethod(Integer n); 

有两种方式获得这个类对象:

  • 使用类的文字,例如int.class
  • 使用TYPE对应的成员包装类,例如, Integer.TYPE

这不是代表原始包装的类。换言之,

int.class != Integer.class 
+0

这就是我所谈论的。我知道可以使用'int.class'或任何等价的原始类声明来反射它。 – Makoto

相关问题