我很困惑为什么Integer和int可以在Java中互换使用,即使一个是原始类型而另一个是对象?
例如:
Integer b = 42;
int a = b;
Run Code Online (Sandbox Code Playgroud)
要么
int d = 12;
Integer c = d;
Run Code Online (Sandbox Code Playgroud)
Ala*_*mon 13
发表文章的前几句话描述得非常好:
您不能将int(或其他原始值)放入集合中.集合只能保存对象引用,因此必须将原始值装入适当的包装类(在int的情况下为Integer).当您从集合中取出对象时,您将获得放入的Integer; 如果需要int,则必须使用intValue方法取消对Integer的装箱.所有这些装箱和拆箱都是一种痛苦,并使你的代码变得混乱.自动装箱和拆箱功能可自动完成整个过程,消除痛苦和杂乱.
简而言之,基本上就是这样.它允许您利用收集框架来获得灵感,而无需自己完成工作.
主要缺点是它会使新程序员感到困惑,并且如果不能正确理解和使用代码,可能会导致代码混乱/混乱.
小智 8
Java支持自动装箱并自动将原始值包装到对象中,并将对象解包为某些类型的原始值,如char- Character,int- Integer,double- Double等.
Oracle文档中的注释:
那么什么时候应该使用自动装箱和拆箱?仅在引用类型和基元之间存在"阻抗不匹配"时才使用它们,例如,当您必须将数值放入集合时.将自动装箱和拆箱用于科学计算或其他对性能敏感的数字代码是不合适的.Integer不能替代int; autoboxing和unboxing模糊了原始类型和引用类型之间的区别,但它们并没有消除它.