一篇关于拆装箱与类特性的随笔

简介: 拆装箱是Java设计者智慧的体现

 在刚接触Java,还没接触到面向对象和类的概念的时候老师说什么那就是什么。记得那个时候老师要我们根据所学基础语法完成一道上机作业:

image.gif编辑

那个时候只知道定义两个数据类型的变量然后在输出语句中进行相应的换算达到目的,Eclipse里的那一段代码至今都还在:

image.gif编辑

当我深入了解到包装类的底层原理,突然发现以前的语法好像行不通。

其实短短的一行代码其实背后有巨大的学问,本质还是体现类的特性!

Integer integer=1;

image.gif

这行代码为什么能成立?

按照类的特性,都知道=的左边对应的是编译类型,右边对应的是运行类型,上述代码中的1,就是一个普普通通的数值类型的常量,既没有创建相应的对象更没有发生类的加载,就别说保证为运行类型了

可为什么这种不符合规则的操作在开发工具里写出来不会报错呢?

首先能确定的是Integer是int的包装类,其次在JDK5以前有一个装箱,拆箱的概念

装箱:把基本数据类型转换为对应的包装类类型

拆箱:把包装类类型转换为对应的基本数据类型

就像这样:

//手动装箱 
        Integer integer=Integer.valueOf(1);
        //手动拆箱
        Integer integer2=1;
        integer2.intValue();

image.gif

在旧版本JDK(JDK5之前)的基础上,装箱操作就是通过向valueOf()方法里传入基本数据类型然后通过方法本身的逻辑返回包装类类型达到类型匹配的效果,而拆箱就反之

这两者体现的是面向对象的特点——通过类加载,初始化类,调用类的成员方法等不同方式让对象的引用指向堆中的对象

我想这里大家会有疑惑,为什么没有通篇没有一个new你却说类加载了呢?因为查看源码可以发现,valueOf()是一个静态方法:

如图

image.gif编辑

而我们知道使用类的静态成员时,是会发生类的加载!这也就照应了面向对象中类的特性。

在新版本JDK的基础之上,装箱,拆箱的操作依然存在(毕竟是java语言本质的体现)只不过被开发者们简化了,以自动的隐式操作将手动装,拆箱代替。于是就有了如今这样的语法结构:

Integer integer =1;

image.gif

感受至此,真的是在学习的过程中不断体会到开发JDK作者们的伟大,他们把复杂的逻辑以极其简单的方式呈现给我们,供我们使用。就像封装,继承,多态,接口.......都是在让代码变得越来越规范,让程序越来越简单。

所思所想,皆是收获,亦是分享~


相关文章
|
4月前
|
设计模式
建模底层逻辑问题之以命令设计模式为例,要用定义法建模,如何实现
建模底层逻辑问题之以命令设计模式为例,要用定义法建模,如何实现
|
4月前
|
设计模式 Java
重构你的代码:探索Java中的混合、装饰器与组合设计模式
【8月更文挑战第30天】在软件开发中,设计模式为特定问题提供了结构化的解决方案,使代码更易理解、维护及扩展。本文将介绍三种常用的 Java 设计模式:混合模式、装饰器模式与组合模式,并附有示例代码展示实际应用。混合模式允许通过继承多个接口或抽象类实现多重继承;装饰器模式可在不改变对象结构的情况下动态添加新功能;组合模式则通过树形结构表示部分-整体层次,确保客户端处理单个对象与组合对象时具有一致性。
41 1
|
4月前
|
Android开发 iOS开发
Android项目架构设计问题之将隐式跳转的逻辑进行抽象和封装如何解决
Android项目架构设计问题之将隐式跳转的逻辑进行抽象和封装如何解决
46 0
|
6月前
|
存储 安全 Java
Java集合框架核心组件理解这些基础类型能优化代码效率。
【6月更文挑战第21天】Java集合框架核心组件:ArrayList快速随机访问,适合大量查找;LinkedList擅于插入删除,不适于随机访问;HashMap是键值对存储,O(1)查找删除。选择取决于应用场景:频繁访问选ArrayList,频繁增删选LinkedList,键值查找选HashMap。理解这些基础类型能优化代码效率。
37 1
|
设计模式 存储 Java
JAVA设计模式11:组合模式,以统一的方式处理单个对象和组合对象
JAVA设计模式11:组合模式,以统一的方式处理单个对象和组合对象
171 0
|
存储 算法 Java
Java集合重点知识详解——优点以及内部继承关系
Java集合重点知识详解——优点以及内部继承关系
99 0
|
网络协议 数据可视化 测试技术
面向对象分析与设计的底层逻辑
真正掌握了面向对象分析和设计的方法,也体会到其中的益处,对理解业务、方案设计、编码开发都有好处。
847 7
面向对象分析与设计的底层逻辑
|
存储 Web App开发 Java
Android性能优化的底层逻辑
Android性能优化的底层逻辑
244 0
Android性能优化的底层逻辑
|
程序员 数据安全/隐私保护 C++
C++面向对象封装特性的实例分析与应用扩展(一)
生活中充满复杂性,处理复杂性的方法之一就是简化和抽象。在计算中,为了根据信息与用户之间的接口来表示它,抽象是至关重要的。将问题的本质特征抽象出来,并根据特征来描述解决方案。抽象往往是用户定义类型的捷径,在C++中用户定义类型指的就是实现抽象接口的类设计。
132 1
C++面向对象封装特性的实例分析与应用扩展(一)
|
安全 Java 编译器
深挖⾯向对象编程三⼤特性 --封装、继承、多态
深挖⾯向对象编程三⼤特性 --封装、继承、多态
深挖⾯向对象编程三⼤特性 --封装、继承、多态