目录

什么是装箱、拆箱

基本类型和包装类型

为什么会有基本类型?

为什么还要有包装类型

两者区别

两者互转

源码分析(JDK1.8版本)

valueOf方法

1.Integer、Short、Byte、Character、Long的valueOf方法

2.Double、Float的valueOf方法

xxxValue方法


什么是装箱、拆箱

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

基本类型和包装类型

java中提供了8中基本数据类型,每种基本类型都对应一种包装类型

为什么会有基本类型?

Java是面向对象编程的语言,而基本类型并不是对象,为什么会存在基本类型呢?

Java通过new创建对象,对象存储在堆里,我们通过栈中的引用来使用该对象。但Java中绝大部分对象是朝生夕死的,这样就会有大量对象的创建和回收,效率低下。所以对于频繁使用的一些类型,就不用关键字new来创建,直接将变量值存储在栈中更为高效。

为什么还要有包装类型?

既然基本类型那么高效,那为什么还要有它们的包装类型呢?

为了使基本类型具有对象特征,从而实现更多的功能。因为类能够提供必要的方法,用于实现基本数据类型的数值与String之间的转换,以及一些其他属性和方法; 另外,有些数据结构库类(如集合类型Collection、Map)只能操作对象,而不支持基本数据类型的变量,包装类提供一种便利的方式,能够把基本数据类型转换成等价的对象,从而可以利用数据结构库类进行处理。

两者区别

1. 声明方式不同:基本类型不使用new关键字,而包装类型需要使用new关键字来在堆中分配存储空间;
 
2. 存储方式及位置不同:基本类型是直接将变量值存储在栈中,而包装类型是将对象放在堆中,然后通过引用来使用;
 
3. 初始值不同:基本类型的初始值如int为0,boolean为false,而包装类型的初始值为null;
 
4. 使用方式不同:基本类型直接赋值直接使用就好,而包装类型在集合如Collection、Map时会使用到。

由于java提供了默认box unbox操作,所以在大数据和高并发场景下,需注意性能。

两者互转

基本类型转包装类型:valueOf()

包装类型换基本类型:xxxValue()  。(xxx代表对应的基本数据类型)

源码分析(JDK1.8版本)

valueOf方法

1.Integer、Short、Byte、Character、Long的valueOf方法

Integer、Short、Byte、Character、Long这几个类的valueOf方法的实现是类似的(在某个范围内的数值的个数是有限的),以Integer为例

这行代码的意思是,如果int值在[-128, Integer.IntegerCache.high](Integer.IntegerCache.high一般为127)区间内,则直接从Integer.IntegerCache.cache里取,否则新创建一个对象。

接下来看看IntegerCache是怎样的

从这段代码可以看出,IntegerCache的作用就是预先创建并缓存一定范围内的Integer对象[-128, high],high值可以通过调整虚拟机系统参数来改变,但-128~127一定会被缓存。此处需注意:这表明通过装箱操作即valueOf方法得到的指定int值的包装对象,都是同一个对象,反之,则不是同一个对象。

2.Double、Float的valueOf方法

以Double为例

这表明通过装箱操作得到的每个Double对象都是不同的对象。

3.Boolean的valueOf方法

这表明通过装箱操作得到的所有true值的Boolean对象都是同一个对象,所有的false值的Boolean对象都是同一个对象。

xxxValue方法

包装类型通过value属性来保存基本类型的值。xxxValue方法直接返回value的值。

JDK--box和unbox的更多相关文章

  1. c# dynamic,maybe I should say it is just some shortcut for "Object", box and unbox, without the cast

    dynamic: void Main() { var b="2"; dynamic a="2"; if(a.GetType()==typeof(int))b+= ...

  2. 你不知道的JavaScript(六)Box&Unbox

    很多语言中都有Box和Unbox的概念,很多书籍把Box翻译为"装箱操作",指的是將基本数据类型包装成对象:Unbox和它相反,把对象类型转换为基本类型. 我们知道JavaScri ...

  3. 【java基础之jdk源码】Object

    最新在整体回归下java基础薄弱环节,以下为自己整理笔记,若有理解错误,请批评指正,谢谢. java.lang.Object为java所有类的基类,所以一般的类都可用重写或直接使用Object下方法, ...

  4. JVM锁简介:偏向锁、轻量级锁和重量级锁

    转自:https://www.aimoon.site/blog/2018/05/21/biased-locking/ 比较复杂,简略见另一篇:https://www.cnblogs.com/twohe ...

  5. hashCode和identityHashCode底层是怎么生成的

          前言:在工作中使用==埋下的坑这篇博文的最后,我想到了两个问题,其中一个是——为什么 int int1=99;int int2=99;int1和int2的identityHashCode是 ...

  6. Java中Object类hashCode的底层实现

    Java中Object类hashCode的底层实现 openjdk\jdk\src\share\native\java\lang\Object.c 42 static JNINativeMethod ...

  7. .NET面试题系列[4] - C# 基础知识(2)

    2 类型转换 面试出现频率:主要考察装箱和拆箱.对于有笔试题的场合也可能会考一些基本的类型转换是否合法. 重要程度:10/10 CLR最重要的特性之一就是类型安全性.在运行时,CLR总是知道一个对象是 ...

  8. CLR via C# 摘要二:IL速记

    最简单的IL程序 .assembly test {} .method void Func() { .entrypoint ldstr "hello world" call void ...

  9. Scala HandBook

    目录[-] 1.   Scala有多cool 1.1.     速度! 1.2.     易用的数据结构 1.3.     OOP+FP 1.4.     动态+静态 1.5.     DSL 1.6 ...

  10. Emit学习(2) - IL - 常用指令介绍

    学习Emit必不可少的, 会使用到IL中间代码. 初见IL代码, 让我有一种汇编的感觉, 让我想起了, 大学时, 学习8051的汇编语言. 多的就不扯了, 直接进入正题, OpCodes指令集是不是有 ...

随机推荐

  1. 建站记录:设置apache .htaccess文件给网站添加404错误处理页面

    有些空间服务商会在后台设置中,提供这个选项,可以直观地设置404错误指向的页面,这一点很方便,比如我之前用的阿里云虚拟主机就可以在控制台直接设置. 新租用的香港主机后台没有找到选取文件的地方,只是可以 ...

  2. 分布式任务调度平台XXL-JOB

    <分布式任务调度平台XXL-JOB>       一.简介 1.1 概述 XXL-JOB是一个轻量级分布式任务调度框架,其核心设计目标是开发迅速.学习简单.轻量级.易扩展.现已开放源代码并 ...

  3. 震惊!外部类可以访问内部类private变量

    在讲Singleton时我举例时用过这样一段代码: public class SingletonDemo { private static class SingletonHolder{ private ...

  4. php定时执行操作及ob_flush()与flush()的使用

    版权声明:本文为博主原创文章,未经博主允许不得转载. http://blog.csdn.net/qq_38125058 一: 每隔30s执行一次,将字符串写入文件 // 30秒执行一次 ignore_ ...

  5. Scrapy爬虫框架第四讲(Linux环境)

    下面我们来学习Selector的具体使用:(参考文档:http://scrapy-chs.readthedocs.io/zh_CN/1.0/topics/selectors.html) Selecto ...

  6. 关于html以及js相关格式验证的记录

    关于html中禁止输入的一些写法主要是实现实时监听值:      下面的例子实现的事只运行输入数字切小数位数不能超过两位的示例.      1. onkeyup事件是在输的时候在键盘松开的时候进行触发 ...

  7. Maven学习(八)-- 使用Nexus搭建Maven私服

    摘自:http://www.cnblogs.com/xdp-gacl/p/4068967.html 一.搭建nexus私服的目的 为什么要搭建nexus私服,原因很简单,有些公司都不提供外网给项目组人 ...

  8. awk 手册

    1. 前言 有关本手册 : 这是一本awk学习指引, 其重点着重于 : l        awk 适于解决哪些问题 ? l        awk 常见的解题模式为何 ? 为使读者快速掌握awk解题的模 ...

  9. jQuery上下滑动内容切换选项卡

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. spring security4.2.2的maven配置+spring-security配置详解+java源码+数据库设计

    最近项目需要添加权限拦截,经讨论决定采用spring security4.2.2!废话少说直接上干货! 若有不正之处,请谅解和批评指正,不胜感激!!!!! spring security 4.2.2文 ...