int和Integer的区别
int和Integer的区别
int和Integer的基本区别
- int是基本数据类型,Integer是int包装类。
- Integer变量必须实例化后才能使用,int可以直接使用
- Integer的默认值是null,int默认值是0
- Integer变量实际上是对象的引用,指向new的Integer对象,int是直接存储数据
Integer的自动装箱
一般我们生成对象都是Object o = new Objectz()
,但是对于Integer
,我们可以Integer a = 10
;
因为Integer的自动装箱功能。
通过反编译工具我们可以看到class文件下是
Integer a = Integer.valueOf(10);
这就是基本数据类型的装箱。
Integer的自动拆箱
int b = a;
反编译生成的class文件是int b = a.intVlaue();
深入对比
Integer a = new Integer(10);
Integer b = new Integer(10);
System.out.println(a == b);
System.out.println(a.equals(b));
结果前false,后true。
因为Integer变量是对Integer对象的引用,new了两个对象,显然内存地址不一样,引用不一样。
而Integer重写了equals方法,数值一样就返回true。
public static void main(String[] args) {
Integer a = 10;
Integer b = 10;
System.out.println(a == b);
Integer c = 128;
Integer d = 128;
System.out.println(c == d);
}
结果前true,后false
因为Integer自动装箱时对数值在-128到127的对象放入缓存中,第二次就直接取缓存中的数据而不会new。
public static void main(String[] args) {
Integer a = new Integer(10);
int b = 10;
System.out.println(a == b);
}
结果为true
因为Integer类型和int比较时,会自动拆箱,化为基本类型数据比较。
触发自动拆箱
算术运算会触发自动拆箱
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· 趁着过年的时候手搓了一个低代码框架
· 推荐一个DeepSeek 大模型的免费 API 项目!兼容OpenAI接口!