阿里Java学习路线:阶段 1:Java语言基础-Java面向对象编程:第19章:包装类:课时86:装箱与拆箱

    技术2022-07-10  134

    基本数据类型的包装类都是为了基本数据类型转为对象提供的,这样对于基本类型与包装类之间就有了如下的操作关系。 1.数据装箱:将基本数据类型保存到包装类之中,一般可以利用构造方法完成。 (1)Integer类:public Integer(int value); (2)Double类:public Double(double value); (3)Boolean类:public Boolean(boolean value); 2.数据拆箱:从包装类中获取基本数据类型: (1)数值型包装类已经由Number类定义了拆箱方法了; (2)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) ; } }

    范例:以double与Double为例

    public class JavaDemo { public static void main(String args[]) { Double obj = new Double(10) ; // 装箱 double num = obj.doubleValue() ; // 拆箱 System.out.println(num * num) ; } }

    范例:以boolean与Boolean为例

    public class JavaDemo { public static void main(String args[]) { Boolean obj = new Boolean(true) ; // 装箱 boolean num = obj.booleanValue() ; // 拆箱 System.out.println(num) ; } }

    可以发现从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) ; // 直接参与数学运算 } }

    除了提供有这种自动的数学运算支持之外,使用自动装箱最大的好处是可以实现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); } }

    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()比较,如果不超过了则使用“==”即可判断。

    Processed: 0.011, SQL: 9