上一篇:包装才更美:初识包装类 | 带你学《Java面向对象编程》之五十五
【本节目标】
通过阅读本节内容,你将进一步了解包装类的相关内容,并搞懂如何进行基本数据的装箱、拆箱,学会借助更高版本的JDK简化编程过程。
装箱与拆箱操作
基本数据类型的包装类都是为了基本数据类型转为对象提供的,这样对于基本类型与包装类之间就有了如下的操作关系。
-
数据装箱:将基本数据类型保存到包装类之中,一般可以利用构造方法完成。
- Integer类:public Integer(int value);
- Double类:public Double(double value);
- Boolean类:public Boolean(boolean value);
-
数据拆箱:从包装类中获取基本数据类型:
- 数值型包装类已经由Number类定义了拆箱的方法了;
- Boolean型:public boolean boolean Value();
范例:以int和Integer为例
public class JavaDemo {
public static void main(String args[]) {
Integer obj = new Integer(10) ; //装箱
int num = obj.intValue() ; //拆箱
System.out.println(num *num) ;
}
}
执行结果:100
范例:以double与Double为例
public class JavaDemo {
public static void main(String args[]) {
Double obj = new Double(10.1) ; //装箱
double num = obj.doubleValue() ; //拆箱
System.out.println(num *num) ;
}
}
执行结果:102.00999999999
范例:以boolean与Boolean为例
public class JavaDemo {
public static void main(String args[]) {
Boolean obj = new Boolean(true) ; //装箱
boolean num = obj.booleanValue() ; //拆箱
System.out.println(num) ;
}
}
执行结果:true
可以发现从JDK1.9之后,对于所有包装类之中提供的构造方法就变为了过期处理,不建议用户继续使用了,这是因为从JDK1.5之后为了方便处理提供了自动的装箱与开箱操作,所以这种手工的模式基本上没人用了。
范例:观察自动的装箱与拆箱
public class JavaDemo {
public static void main(String args[]) {
Integer obj = 10 ; //自动装箱,此时不再关心构造方法了
int num = obj ; //自动拆箱
obj ++ ; //包装类对象可以直接参与数学运算
System.out.println(num *obj) ; //直接参与数学计算
}
}
执行结果:110
除了提供有这种自动的数学运算支持之外,使用自动装箱最大的好处是可以实现Object接收基本数据类型的操作。
范例:Object接收小数
public class JavaDemo {
public static void main(String args[]) {
Object obj = 19.2 ; //double自动装箱为Double,向上转型为object
double num = (Double) obj ; //向下转型为包装类,再自动拆箱
System.out.println(num * 2) ;
}
}
执行结果:38.4
JDK1.5之后提供的自动支持功能,到了JDK1.9之后为了巩固此概念,所以将包装类的构造方法都设置为过期定义了。
但是对于包装类需要注意一些问题了,关于相等判断上。
范例:观察相等判断
public class JavaDemo {
public static void main(String args[]) {
Integer x = 99 ;
Integer y = 99 ;
System.out.println(x == y) ; //true
}
}
public class JavaDemo {
public static void main(String args[]) {
Integer x = 128 ;
Integer y = 128 ;
System.out.println(x == y) ; //false
System.out.println(x.equals(y)) ; //true
}
}
以后进行包装类相等判断的时候一定要使用equals()方法完成,而包装类本身也需要考虑占位的长度,如果超过了一位的内容,那么就需要使用equals()比较,如果不超过,则使用“==”即可判断。
想学习更多的Java的课程吗?从小白到大神,从入门到精通,更多精彩不容错过!免费为您提供更多的学习资源。
本内容视频来源于阿里云大学