Javase学习15-自动装箱与自动拆箱
Posted TSCCG
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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-自动装箱与自动拆箱的主要内容,如果未能解决你的问题,请参考以下文章