java中的对象类型

Pav*_*esh 0 java

我了解到Java不是100%OOP语言,这是因为数据类型不是对象.但据我来说,int是一个类型的Integer,并Integer属于NumberNumber属于Object.所以java是100%的OOP语言.我对么?

Dav*_*d Z 10

不,int而且Integer是不同的.Integer是一个常规类,如你所知,它是一个子类,Number它本身就是它的子类Object.但这int是一种原始类型.它不是一个类,所以显然不是任何类的子类; 它没有任何方法或属性,int除了声明该类型的变量之外,通常没有任何东西可以用它自己做,例如

int x = 3;
Run Code Online (Sandbox Code Playgroud)

由于int不是类,因此int变量的值不是对象.它们没有方法或属性或属性,除了某些由编译器专门处理的数学运算外,您无法用它们做多少.

请注意,Java编译器(最新版本)将自动插入代码以在必要时将其转换int为an Integer,反之亦然.因此,在编写程序时,它们看起来可能是相同的,但实际上并非如此.例如,如果你写

Integer y = 5;
Run Code Online (Sandbox Code Playgroud)

javac 把它翻译成

Integer y = Integer.valueOf(5);
Run Code Online (Sandbox Code Playgroud)

要么

Map<Integer,Integer> m = ...;
m.put(4, 8);
int z = m.get(4);
Run Code Online (Sandbox Code Playgroud)

Map<Integer,Integer> m = ...;
m.put(Integer.valueOf(4), Integer.valueOf(8));
int z = m.get(Integer.valueOf(4)).intValue();
Run Code Online (Sandbox Code Playgroud)

  • 为了帮助进一步对主题进行互联网搜索,Java编译器在基元和对象类型之间自动转换的过程被称为*autoboxing*和*autounboxing* - 在对象中装箱基元,或从基元中取出基元". (4认同)