java中的对象类型

java中的对象类型,java,Java,我了解到Java不是100%的OOP语言,这是因为数据类型不是对象。但据我所知,int属于Integer类型,Integer属于Number和Number属于对象。所以java是一种100%的OOP语言。我说的对吗?不,int和Integer是不同的Integer是一个常规类,如您所知,它是Number的一个子类,它本身是Object的一个子类。但是int是一种基本类型。它不是一个类,因此显然不是任何事物的子类;它没有方法或属性,通常除了声明该类型的变量(例如 int x = 3; 由于int

我了解到Java不是100%的OOP语言,这是因为数据类型不是对象。但据我所知,
int
属于
Integer
类型,
Integer
属于
Number
Number
属于
对象。所以java是一种100%的OOP语言。我说的对吗?

不,
int
Integer
是不同的
Integer
是一个常规类,如您所知,它是
Number
的一个子类,它本身是
Object
的一个子类。但是
int
是一种基本类型。它不是一个类,因此显然不是任何事物的子类;它没有方法或属性,通常除了声明该类型的变量(例如

int x = 3;
由于
int
不是类,因此
int
变量的值不是对象。它们没有方法、属性或属性,除了编译器专门处理的某些数学运算之外,您对它们也无能为力

请注意,Java编译器(最新版本)将自动插入代码,以将
int
转换为
整数,或在必要时将其转换为
Integer
。所以当你编写程序时,它们看起来是一样的,但实际上不是。例如,如果你写

Integer y = 5;
javac
将其转换为

Integer y = Integer.valueOf(5);

Map m=。。。;
m、 put(4,8);
intz=m.get(4);
变成

Map<Integer,Integer> m = ...;
m.put(Integer.valueOf(4), Integer.valueOf(8));
int z = m.get(Integer.valueOf(4)).intValue();
Map m=。。。;
m、 put(Integer.valueOf(4),Integer.valueOf(8));
intz=m.get(Integer.valueOf(4)).intValue();

int
不是类
Integer
的对象。在Java中,并非所有的数据类型都是对象。

要补充前面的答案(我认为可能有点遗漏了要点)-是的,
int
Integer
是两个完全不同(但相关)的概念-一个是基元,另一个是等价的类。然而,更重要的是,这种区别与Java是否是面向对象语言完全没有任何关系


每个Java程序都会在某一点上使用对象(即使它只是
String[]args
方法的
main
参数)。因此,Java无疑是一种面向对象的语言,因为它依赖类作为程序开发的主要手段。它支持非对象类型这一事实与此无关。

为了帮助进一步在互联网上搜索主题,Java编译器在原语和对象类型之间自动转换的过程称为自动装箱和自动取消装箱-将原语装箱到对象中,或者把原语从“盒子”里拿出来。谢谢,先生。你的回答非常有用,因为这不是推特。你可以把你的话拼出来。如果其中一个答案对你来说很完美,为什么不接受呢?我想提问者的意思是,他听说Java不是100%OOP,因为它有原语,而不是Ruby,在Ruby中,一切都是对象。他并没有说java根本不是OOP,只是说有些语言元素并没有严格遵循这种范式。
Map<Integer,Integer> m = ...;
m.put(Integer.valueOf(4), Integer.valueOf(8));
int z = m.get(Integer.valueOf(4)).intValue();