| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> Java自动装箱/拆箱 -> 正文阅读 |
|
[Java知识库]Java自动装箱/拆箱 |
自动装箱和自动拆箱那么Java中有八大基本数据类型,byte、char、short、int、long、double、float、boolean。而它们有对应的包装类 Byte、Character、Short、Integer、Long、Double、Float、Boolean,这样通过包装后,它们就成为了引用数据类型 那么基本数据类型怎么变成对应的包装类呢?
在jdk1.5之前呢,是没有自动装箱的功能的,那么只能由我们编写代码手动装箱!将int类型装箱为Integer类型
我们就拿Integer为例,在jdk5之后就有了自动装箱/拆箱功能
通过字节码的角度我们可以看得更加清晰! ?我们来看看这个Integer.valueOf()方法为我们做了些什么,点进源码中
这个缓存池中的范围是多少呢? ?那么从源码中看出缓存的数据为[-128,127],则从缓存中获取对象,那么现在来做一道笔试题
问输出结果是多少?那么这题呢第一个输出为false,第二个输出为true。因为对象a和对象b都是以new的方式创建对象, 不会从缓存中获取对象,那么这两个是不同的对象,即使它们的值都一样! 对象c和对象d就是自动装箱的过程,其底层会调用Integer.valueOf()方法,从缓存池中获取对象,其底层缓存池是从类加载的时候就存在的
那么从中获取的两个对象也必定相同! 对象e和对象f,因为超过了缓存池中的范围,它就直接返回一个Integer对象,那么调用两次肯定是不同的对象,所以返回false。
其底层是使用了intValue()方法,我们点进源码中 ? ?可以看见,其返回的是一个int值,那么我们就很清楚为什么它可以直接赋值给int类型了,其底层就是调用了intValue()方法自动拆箱。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 6:40:10- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |