int 和 Integer

本文深入探讨了Java中int和Integer数据类型的差异,包括它们的默认值、实例化方式和数据存储位置的不同。通过具体示例,阐述了在实际编程中如何选择合适的数据类型,以及拆装箱机制的原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

博客概要

     承接之前篇博文中提到的数据类型,在此分享“int”和“Integer”的知识点~

int 和 Integer的区别

intInteger
基本数据类型
原始类型
int的包装类
引用类型
变量不需要实例化使用变量必须实例化后才能使用
直接存储数据值是对象的引用
指向new出Integer对象
默认值:0默认值:null

1.默认值问题

intInteger
默认值:0默认值:null

     由上表可知,int默认值为0,Integer的默认值为null,粗看其实觉得没什么,“0”和“null”的区别能有什么意义呢?但其实在实际的使用中,默认值是挺重要的,在此举个栗子:

以一次面试为例:
面试有两个人A和B,面试官准备了两套笔试题
A没来面试,所以他没有做题
B做了笔试题,但…全错 = =

     由上面这个例子可知,A没来参加笔试,那他应该是没有成绩,应该为null;而B是做了全错,成绩应该才是0。“null”和“0”的区别就在这里了,所以想要清楚表达“没来参加”以及“成绩为0”的话,就得要使用Integer,int是无法区分“未赋值”“值为0”情况的。

2.实例化问题

intInteger
变量不需要实例化使用变量必须实例化后才能使用
int wcw = 7;
System.out.print( wcw );
Integer wcw = new Integer( 7 );
System.out.print( wcw );

     由上表可知,int可直接定义变量名并赋值使用,Integer则需要实例化,也就是“new”一个对象出来才能赋值使用。
     看似Integer使用起来好像比较麻烦一些,但它在实例化之后,可以凭“变量名.方法名( )”也就是“wcw.ParseInt( )”(这是Integer中将基本数据类型转换为字符串的一个方法)这种形式来使用Integer里封装的方法,提供了一系列数据的成员和操作,功能性更多元化。


     这里其实还可以涉及到Java拆装箱的知识,那啥是“拆装箱”?下面做简单介绍。
     其实我们不妨就把这个过程想象成,“把东西装进箱子”、“把东西从箱子里拆出来”这两个过程,到底是啥意思呢?下面结合代码举栗子:

//1.
Integer wcw = new Integer( 7 );
//2.
int luffy = wcw.inValue(  );

     上面栗子中,数字“7”就相当于要拆装的实体对象,第一行代码就是使用Integer这个包装类,将“7”装进“箱子”——“wcw”这个对象,这就是“装”;而第二行代码,是使Integer中包装类型的数据转化为int的基本数据类型,也就是将“7”从Integer中取出来,这就是“拆”。不过这还只是“手动拆装箱”的过程,在JDK1.5及之后,新增了“自动拆装箱”,下面结合代码举栗子:

//1.
Integer wcw = 7;
//2.
int luffy = wcw;

     以上就是“自动拆装箱”,可以很明显的发现,“自动”比起“手动”少了些代码,定义赋值方式变得更简单了,但是其实往深了,里面会有一些取值范围等细节需要我们注意的地方,博主自己也还有待继续了解的= =


3.数据值问题

intInteger
直接存储数据值是对象的引用
指向new出Integer对象
值传递
传值传参传的是副本
修改后原值不变
引用传递
传值传参穿的是地址
修改后原值改变
保存在栈保存在堆

     以上表中,有两个艰难理解的概念,“值传递”“引用传递”,举个栗子解释一下:

有俩同学A和B,要考试了,A有一份复习资料,关于复习资料的使用:
"值传递"就相当于,B把A的复习资料复印了一份,B在自己这份资料上涂改,并不会影响到A的资料。
“引用传递"就相当于,A和B共用同一份复习资料,资料存放的地方是一个"地址”,B要使用资料时,就得按照"地址"去找,并且在资料上涂改的时候,也会影响到A的使用。

     在以上的栗子中,“引用”的概念可能也比较难理解吧,下面再举一个栗子解释:

其实相当于“找学生”
将“学生”理解为要找的对象实体,“地址”理解为学生学号
每次找学生都是通过学号找,这就是“引用”

     经由以上栗子的解释后,其实就不难理解,int在进行值传递的时候,是将实参的值,copy一份给形参,而Integer在进行引用传递的时候,是将实参的地址值,copy一份给形参,一个是“传值”,一个是“传地址”。所以,我们在进行比较的时候,对于判断地址是否相等的,要使用“==”;而对于判断内容实体值是否相等的,要使用“equals”


总结

     说实话平时敲代码,不可能用不到“int”来定义变量,但是用了无数次,今天总结了也才明白,小小的“int”也还有诸多细节需要注意的,所以博主的基础真还有点糟糕= =继续巩固学习吧,加油~


参考资料

【1】Java传参-基本数据类型和引用数据类型作为参数的区别(值传递)
【2】java面试题之int和Integer的区别
【3】彻底让你明白 Integer 类和 int 基本数据类型的区别
【4】int和Integer的区别,什么是自动装箱和自动拆箱?
【5】…

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值