Javase学习15-自动装箱与自动拆箱
2021/6/2 22:20:49
本文主要是介绍Javase学习15-自动装箱与自动拆箱,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Javase学习15-自动装箱与自动拆箱
1. 问题引入
java中8种基本数据类型又对应了8种包装类,8种包装类属于引用数据类型,父类是Object。
那么问题来了,SUN公司为什么要再提供8种包装类呢?
我们试想这样一种情况,一个方法需要传入一个数字,但是参数类型是Object类型的,而数字属于基本数据类型,显然该方法无法接收基本数据类型的数字。这说明8种基本数据类型不够用。
那么这时该如何处理?
public class IntegerDemo01 { //程序入口 public static void main(String[] args) { } //需要传入数字的方法 public static void getNum(Object obj) { System.out.println(obj); } }
我们可以传入一个数字对应的包装类进去:
/** * @Author TSCCG * @Date 2021/6/2 18:16 */ public class IntegerDemo01 { public static void main(String[] args) { //将100这个数字通过构造方法包装成一个对象 YourInt yourInt = new YourInt(100); //getNum()方法虽然不能直接传入100,但是可以传入100对应的包装类型 getNum(yourInt); } public static void getNum(Object obj) { System.out.println(obj); } } //int类型的包装类,继承Object class YourInt { int value; //new对象的时候通过构造方法将数字传入对象 public YourInt(int value) { this.value = value; } //重写toString,使其输出的是数字 @Override public String toString() { return String.valueOf(value); } }
输出结果:
100
如此便解决了这种问题。
在实际开发中,我们不需要自己写包装类,8种基本数据类型对应的8种包装类,SUN公司已经为我们写好了,我们直接使用即可。
2. 八种基本数据类型对应包装类
基本数据类型 | 包装类型 |
---|---|
byte | java.lang.Byte(父类Number) |
short | java.lang.Short(父类Number) |
int | java.lang.Integer(父类Number) |
long | java.lang.Long(父类Number) |
float | java.lang.Float(父类Number) |
double | java.lang.Double(父类Number) |
boolean | java.lang.Boolean(父类Object) |
char | java.lang.Character(父类Object) |
3. 装箱与拆箱
3.1 装箱
装箱其实在上面的例题中演示过了,就是将基本数据类型包装成引用数据类型
//基本数据类型10经过构造方法的包装,实现了从基本数据类型向引用数据类型的转换 //基本数据类型 --> 引用数据类型(装箱) Integer integer = new Integer(10);
3.2 拆箱
既然装箱是将基本数据类型转换成引用数据类型,那么拆箱可想而知就是将引用数据类型转换成基本数据类型。
那么,如何来实现呢?
查看包装类底层代码可知,8种包装类中有6个的父类都是Number,故可以先研究一下Number类。
Number类是一个抽象类,有如下方法:
修饰语和类型 | 方法 | 描述 |
---|---|---|
byte | byteValue() | 返回指定号码作为值 byte ,这可能涉及舍入或截断。 |
abstract double | doubleValue() | 返回指定数字的值为 double ,可能涉及四舍五入。 |
abstract float | floatValue() | 返回指定数字的值为 float ,可能涉及四舍五入。 |
abstract int | intValue() | 返回指定号码作为值 int ,这可能涉及舍入或截断。 |
abstract long | longValue() | 返回指定数字的值为 long ,可能涉及四舍五入或截断。 |
short | shortValue() | 返回指定号码作为值 short ,这可能涉及舍入或截断。 |
以上方法在所有数字包装类子类中都有,是专门负责拆箱的,我们可以用引用数据类型调用上面的方法拆箱成各种基本数据类型
//基本数据类型10经过构造方法的包装,实现了从基本数据类型向引用数据类型的转换 //基本数据类型 --> 引用数据类型(装箱) Integer integer = new Integer(10); //引用数据类型 --> 基本数据类型(拆箱) int i = integer.intValue(); System.out.println(i);//10 //引用数据类型通过调用自身的floatValue返回一个float类型的数字 float f = integer.floatValue(); System.out.println(f);//10.0
4. 自动装箱与自动拆箱
JDK1.5之后,支持自动装箱和自动拆箱了
//自动装箱 //int基本数据类型-->自动转换-->Integer类型 Integer a = 100; //自动拆箱 //Integer类型-->自动转换-->int基本数据类型 int b = a;
这篇关于Javase学习15-自动装箱与自动拆箱的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-10百万架构师第十三课:源码分析:Spring 源码分析:Spring核心IOC容器及依赖注入原理|JavaGuide
- 2025-01-10便捷好用的电商API工具合集
- 2025-01-09必试!帮 J 人团队解决物流错发漏发的软件神器!
- 2025-01-09不容小觑!助力 J 人物流客服安抚情绪的软件!
- 2025-01-09为什么医疗团队协作离不开智能文档工具?
- 2025-01-09惊叹:J 人团队用啥软件让物流服务快又准?
- 2025-01-09如何利用数据分析工具优化项目资源分配?4种工具推荐
- 2025-01-09多学科协作难?这款文档工具可以帮你省心省力
- 2025-01-09团队中的技术项目经理TPM:工作内容与资源优化策略
- 2025-01-09JIT生产管理法:优化流程,提升竞争力的秘诀