为什么整数和整数可以互换使用?

2022-09-03 18:20:51

我很困惑为什么整数和int可以在Java中互换使用,即使一个是基元类型,另一个是对象?

例如:

Integer b = 42;
int a  = b;

int d = 12;
Integer c = d;

答案 1

所发表文章的前几句话很好地描述了它:

不能将 int(或其他基元值)放入集合中。集合只能保存对象引用,因此您必须将基元值框入相应的包装器类(在 int 的情况下为 Integer)。当您将对象从集合中取出时,您将获得放入的整数;如果需要 int,则必须使用 intValue 方法取消对 Integer 的装箱。所有这些装箱和拆箱都是一种痛苦,并且会使你的代码变得混乱。自动装箱和拆箱功能可自动执行该过程,消除痛苦和混乱。

简而言之,基本上就是这样。它允许您利用原始人的集合框架,而无需自己完成工作。

主要缺点是它使新程序员感到困惑,如果不正确地理解和使用,可能会导致混乱/令人困惑的代码。


答案 2

Java支持自动装箱,并自动将基元值包装到对象中,并将对象解开为某些类型的基元值,例如 - , - , - 等。charCharacterintIntegerdoubleDouble

来自 Oracle 文档的说明

那么什么时候应该使用自动装箱和取消装箱呢?仅当引用类型和基元之间存在“阻抗不匹配”时(例如,当您必须将数值放入集合中时),才使用它们。不适合将自动装箱和取消装箱用于科学计算或其他对性能敏感的数字代码。整数不能代替整数;自动装箱和取消装箱模糊了基元类型和引用类型之间的区别,但它们并没有消除它。


推荐