带你领会JDK的灵活拆装 | 带你学《Java面向对象编程》之五十六

简介: 本节简单介绍了对基本数据类型的拆箱装箱操作的实现方法,同时介绍了JDK1.5之后采用自动装箱拆箱带来的便捷操作。

上一篇:包装才更美:初识包装类 | 带你学《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的课程吗?从小白到大神,从入门到精通,更多精彩不容错过!免费为您提供更多的学习资源。
本内容视频来源于阿里云大学

下一篇:初识“多继承小帮手”-接口 | 带你学《Java面向对象编程》之五十七
更多Java面向对象编程文章查看此处

相关文章
|
3月前
|
Java Linux
java基础(3)安装好JDK后使用javac.exe编译java文件、java.exe运行编译好的类
本文介绍了如何在安装JDK后使用`javac.exe`编译Java文件,以及使用`java.exe`运行编译好的类文件。涵盖了JDK的安装、环境变量配置、编写Java程序、使用命令行编译和运行程序的步骤,并提供了解决中文乱码的方法。
77 2
|
1月前
|
安全 Java 编译器
JDK 10中的局部变量类型推断:Java编程的简化与革新
JDK 10引入的局部变量类型推断通过`var`关键字简化了代码编写,提高了可读性。编译器根据初始化表达式自动推断变量类型,减少了冗长的类型声明。虽然带来了诸多优点,但也有一些限制,如只能用于局部变量声明,并需立即初始化。这一特性使Java更接近动态类型语言,增强了灵活性和易用性。
106 53
|
22天前
|
Oracle 安全 Java
深入理解Java生态:JDK与JVM的区分与协作
Java作为一种广泛使用的编程语言,其生态中有两个核心组件:JDK(Java Development Kit)和JVM(Java Virtual Machine)。本文将深入探讨这两个组件的区别、联系以及它们在Java开发和运行中的作用。
48 1
|
28天前
|
Java 开发者
Java 面向对象编程
总之,Java 的面向对象编程为开发者提供了一种有效的编程范式,帮助他们构建出高质量、可维护的软件系统。理解和掌握面向对象的概念和原则是成为优秀 Java 开发者的重要基础。
46 3
|
1月前
|
IDE Java 编译器
开发 Java 程序一定要安装 JDK 吗
开发Java程序通常需要安装JDK(Java Development Kit),因为它包含了编译、运行和调试Java程序所需的各种工具和环境。不过,某些集成开发环境(IDE)可能内置了JDK,或可使用在线Java编辑器,无需单独安装。
65 1
|
2月前
|
缓存 Java Maven
java: 警告: 源发行版 11 需要目标发行版 11 无效的目标发行版: 11 jdk版本不符,项目jdk版本为其他版本
如何解决Java项目中因JDK版本不匹配导致的编译错误,包括修改`pom.xml`文件、调整项目结构、设置Maven和JDK版本,以及清理缓存和重启IDEA。
61 1
java: 警告: 源发行版 11 需要目标发行版 11 无效的目标发行版: 11 jdk版本不符,项目jdk版本为其他版本
|
2月前
|
设计模式 Java API
[Java]静态代理与动态代理(基于JDK1.8)
本文介绍了代理模式及其分类,包括静态代理和动态代理。静态代理分为面向接口和面向继承两种形式,分别通过手动创建代理类实现;动态代理则利用反射技术,在运行时动态创建代理对象,分为JDK动态代理和Cglib动态代理。文中通过具体代码示例详细讲解了各种代理模式的实现方式和应用场景。
33 0
[Java]静态代理与动态代理(基于JDK1.8)
|
2月前
|
Java
让星星⭐月亮告诉你,jdk1.8 Java函数式编程示例:Lambda函数/方法引用/4种内建函数式接口(功能性-/消费型/供给型/断言型)
本示例展示了Java中函数式接口的使用,包括自定义和内置的函数式接口。通过方法引用,实现对字符串操作如转换大写、数值转换等,并演示了Function、Consumer、Supplier及Predicate四种主要内置函数式接口的应用。
30 1
|
2月前
|
Java
Java基础之 JDK8 HashMap 源码分析(中间写出与JDK7的区别)
这篇文章详细分析了Java中HashMap的源码,包括JDK8与JDK7的区别、构造函数、put和get方法的实现,以及位运算法的应用,并讨论了JDK8中的优化,如链表转红黑树的阈值和扩容机制。
35 1
|
3月前
|
Oracle Java 关系型数据库
Linux下JDK环境的配置及 bash: /usr/local/java/bin/java: cannot execute binary file: exec format error问题的解决
如果遇到"exec format error"问题,文章建议先检查Linux操作系统是32位还是64位,并确保安装了与系统匹配的JDK版本。如果系统是64位的,但出现了错误,可能是因为下载了错误的JDK版本。文章提供了一个链接,指向Oracle官网上的JDK 17 Linux版本下载页面,并附有截图说明。
Linux下JDK环境的配置及 bash: /usr/local/java/bin/java: cannot execute binary file: exec format error问题的解决
下一篇
DataWorks