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

简介: 拆装箱是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作者们的伟大,他们把复杂的逻辑以极其简单的方式呈现给我们,供我们使用。就像封装,继承,多态,接口.......都是在让代码变得越来越规范,让程序越来越简单。

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


相关文章
|
1月前
|
Java
java面向对象高级分层实例_实体类
java面向对象高级分层实例_实体类
10 1
|
30天前
|
设计模式 存储 安全
【C++ 基本概念】C++编程三剑客:模板、多态与泛型编程的交织与差异
【C++ 基本概念】C++编程三剑客:模板、多态与泛型编程的交织与差异
106 0
|
1月前
|
Java 数据库
java面向对象高级分层实例_数据库操作类
java面向对象高级分层实例_数据库操作类
11 1
|
5月前
|
测试技术
面向对象的 ABAP 里,全局类和局部类有什么区别,以及各自的使用场合试读版
面向对象的 ABAP 里,全局类和局部类有什么区别,以及各自的使用场合试读版
29 1
|
8月前
|
存储 算法 Java
探索Java数组:基础、特性与灵活应用
在Java编程中,数组是一种基础而重要的数据结构,它能够以紧凑的方式存储多个元素。无论是在简单的数据存储还是复杂的算法实现中,数组都扮演着不可或缺的角色。本文将引导您深入了解Java数组,包括数组的基本概念、特性、用法以及常见应用场景。
|
8月前
|
存储 算法 Java
Java集合重点知识详解——优点以及内部继承关系
Java集合重点知识详解——优点以及内部继承关系
71 0
|
10月前
|
算法
《重构2》第七章-封装
《重构2》第七章-封装
74 0
|
编译器 C语言 C++
C++面向对象封装特性的实例分析与应用扩展(二)
封装意义一: 在设计类的时候,属性和行为写在一起,表现事物 语法: class 类名{ 访问权限: 属性 / 行为 }; 示例1:设计一个圆类,求圆的周长
124 0
C++面向对象封装特性的实例分析与应用扩展(二)
|
程序员 数据安全/隐私保护 C++
C++面向对象封装特性的实例分析与应用扩展(一)
生活中充满复杂性,处理复杂性的方法之一就是简化和抽象。在计算中,为了根据信息与用户之间的接口来表示它,抽象是至关重要的。将问题的本质特征抽象出来,并根据特征来描述解决方案。抽象往往是用户定义类型的捷径,在C++中用户定义类型指的就是实现抽象接口的类设计。
98 1
C++面向对象封装特性的实例分析与应用扩展(一)
|
编译器 C++
C++把类的设计看成类型设计
C++把类的设计看成类型设计
88 0