我正在阅读一本关于Java的书,它们似乎可以互换地使用“原始类”和“原始数据类型”这两个术语。基元类和基元数据类型有什么区别?
两者有什么区别?我明白Integer是一个包装类,人们将int引用为基本数据类型。那么它也是一个原始的类?
我正在阅读一本关于Java的书,它们似乎可以互换地使用“原始类”和“原始数据类型”这两个术语。基元类和基元数据类型有什么区别?
两者有什么区别?我明白Integer是一个包装类,人们将int引用为基本数据类型。那么它也是一个原始的类?
他们在这里混淆他们的白话。
原始数据类型是而不是的一个对象。 int
,float
,double
,long
, short
,boolean
和char
是原始数据类型的例子。你不能在这些数据类型上调用方法,并且它们没有很大的内存占用量,这是它们与类的显着差异。
其他所有是一个类(或接口和枚举类的类)。几乎所有以大写字母开头的东西,如String
,Integer
都是类。数组也可以分类为非原语,即使它们可能拥有它们。 int[]
不是原始类型,但它保存原语。
,可以逼真地来接近将是包装类,as explained by the JLS,但即使这样,他们仍然类,而不是原语的唯一的事情。
原型类在反射API的上下文中具有特殊含义:当您需要检索一个采用基本类型参数的方法时,需要与该基元类型对应的基元类对象。
这是很重要的,如果你必须在采取原语和采取包装重载重载之间的区别:
void someMethod(int n);
void someMethod(Integer n);
有两种方式获得这个类对象:
int.class
或TYPE
对应的成员包装类,例如, Integer.TYPE
。这不是代表原始包装的类。换言之,
int.class != Integer.class
这就是我所谈论的。我知道可以使用'int.class'或任何等价的原始类声明来反射它。 – Makoto
'primitive class'是'primitive type'的包装类。所以对于'int'你有'Integer',对于'double'你有'Double'等等 – Lino
听起来有点矛盾... – assylias
我不认为我以前听过“原始类”,并且如果我这样做,我的第一个想法是“嗯?”据我所知,JLS和官方的Java教程并没有把任何东西称为原始类。正如@Lino写道,你的书_probably_意味着大多数人(和JLS)称之为包装类。出于好奇, – yshavit