Java中包装类属于类还是对象?Math等类为何被称为对象?
概念澄清
首先要明确:Integer、Double、Float、Character、Math这些严格意义上都属于类,而非对象。对象是类的实例化产物,是程序运行时在内存中生成的具体实例。
你教授的表述属于教学场景下的常见简化说法,出现这种表述的原因主要有两点:
- 静态方法的调用习惯容易带来表述简化:
Math.abs()、Integer.parseInt()都属于类的静态方法,不需要实例化类就可以直接调用,很多教学场景中不会刻意区分「类的静态方法」和「对象的实例方法」的表述差异,就会顺口把承载静态方法的类称作「对象」。 - 包装类的自动装箱机制容易带来混淆:包装类支持自动装箱,比如写
Integer num = 10;时,JVM会自动调用Integer.valueOf(10)生成一个Integer类的实例(也就是对象),日常开发中常把包装类类型的实例直接称作包装类对象,慢慢就延伸出把包装类本身称作对象的简化表述。
表述对应参考
你可以对照下面的对应关系理解不同表述的实际指向:
教授表述:要获取int类型的绝对值,需要调用Math对象的abs()方法
严格技术表述:要获取int类型的绝对值,需要调用Math类的静态方法abs()
教授表述:在Integer.parseInt()用法中,Integer是对象,parseInt()是对应方法
严格技术表述:在Integer.parseInt()用法中,Integer是int基本类型对应的包装类,parseInt()是该类提供的静态方法
结论
- 严格遵循Java语法定义的前提下,包装类属于类,只有其实例化后的产物可以被称作对象
- 教学场景下的简化表述不需要纠结对错,只要明确表述背后对应的实际概念即可,不需要因为表述差异产生概念混淆。
内容的提问来源于stack exchange,提问作者Punish_me_er
相关产品推荐
相关产品推荐

