包装类型与基本类型的装箱与拆箱操作

文章目录

  • 概述
  • Boolean 与 boolean
  • Character 与 char
  • Byte 与 byte
  • Short 与 short
  • Integer 与 int
  • Float 与 float
  • Double 与 double
  • Long 与 long
  • 总结

概述

基本类型与包装类型,存在相互转化的关系。

  • 基本类型转为包装类型这个过程,被称之为装箱
  • 包装类型转为基本类型这个过程,被称之为拆箱

Boolean 与 boolean

  • 装箱操作通过 Boolean.valueOf() 来完成
  • 拆箱操作通过 Boolean.booleanValue() 来完成

注意,Boolean 只有两个取值,所以通过装箱操作得到的值,都是 Boolean 中的静态变量 TRUE 或者 FALSE

Character 与 char

  • 装箱操作通过 Character.valueOf() 来完成
  • 拆箱操作通过 Character.charValue() 来完成

注意,Character 中存在一个内部缓存类 CharacterCache,缓存范围是 Ascii 码小于 127 的所有字符,即包含了所有的英文字母与半角符号。示例如下:

Character c = '@';
Character c1 = '@';
//因为有缓存,输出 true
System.out.println(c == c1);
Character c2 = '二';
Character c3 = '二';
//中文字符不在缓存范围内,所以输出 false
System.out.println(c2 == c3);

Byte 与 byte

  • 装箱操作通过 Byte.valueOf() 来完成
  • 拆箱操作通过 Byte.byteValue() 来完成

注意,Byte 类中存在一个内部缓存类 ByteCache,缓存范围正好是 byte 类型的取值范围: -128~127。当遇到装箱操作时,将自动从此内部缓存类中获取,示例如下:

Byte b = 10;
Byte b2 = 10;
//因为有缓存,所以这里输出 true
System.out.println(b == b2);

Short 与 short

  • 装箱操作通过 Short.valueOf() 来完成
  • 拆箱操作通过 Short.shortValue() 来完成

Byte 类似,Short 类中也存在内部缓存类 ShortCache,缓存范围也是 -128~127。当遇到此缓存范围中的装箱操作时,将自动从此内部缓存类中获取,示例如下:

Short s0 = 127;
Short s1 = 127;
//因为有缓存,所以这里输出 true
System.out.println(s0 == s1);
Short s2 = 128;
Short s3 = 128;
//这里超出了缓存范围,所以都去创建了新的对象,故输出 false
System.out.println(s2 == s3);

Integer 与 int

  • 装箱操作通过 Integer.valueOf() 来完成
  • 拆箱操作通过 Integer.intValue() 来完成

注意,Integer 中也存在内部缓存类,用法也与上面类似,但不同的是,Integer 的缓存范围可以自定义,通过指定参数来进行设置。

Float 与 float

  • 装箱操作通过 Float.valueOf() 来完成
  • 拆箱操作通过 Float.floatValue() 来完成

Double 与 double

  • 装箱操作通过 Double.valueOf() 来完成
  • 拆箱操作通过 Double.doubleValue() 来完成

Long 与 long

  • 装箱操作通过 Long.valueOf() 来完成
  • 拆箱操作通过 Long.longValue() 来完成

注意,Long 中也存在内部缓存类,用法与 Byte 类似。

总结

  • 装箱操作,一般都是调用包装类的 valueOf() 方法来实现的,例如 Double.valueOf()
  • 拆箱操作,一般都是调用包装类的 xxxVluae() 方法来实现的,例如 Long.longValue()
  • BooleanCharacterByteShortIntegerLong 类型内部都有缓存机制来对一定范围内的值进行缓存操作
    • Boolean 类通过 TRUEFALSE 两个静态变量来实现装箱时的缓存读取操作
    • CharacterByteShortIntegerLong 都是通过内部的缓存类来实现装箱时的缓存读取操作的
    • Character 的缓存范围是 Ascii 码小于 127 的字符
    • ByteShortIntegerLong 的缓存范围都是 -128~127
    • Integer 可以通过修改指定参数来修改缓存范围

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/557304.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器人炒饭小块头一一_小块头机器人炒饭:全智能流程,炒饭芬芳独具

在我的生活里,没有什么不开心的事情是一顿炒饭解决不了的,实在不行就两顿。把前一天剩出来的隔夜饭放到锅里和家里的食材进行组合、翻炒,就可以千变万化,方便好吃又管饱。小块头茶油炒饭,是一份易拉罐材质独立包装的炒…

Java面试——Spring系列总结

文章目录: 1.什么是Spring? 2.Spring由哪些模块组成? 3.Spring中都用到了哪些设计模式? 4.什么是Spring IOC容器?有什么作用? 5.Spring IoC的实现机制 6.BeanFactory 和 ApplicationContext有什么区别…

gateway 过滤器执行顺序_spring boot gateway 过滤器的执行顺序

前言学习官方文档,发现对于过滤器有分为三类默认过滤器自定义过滤全局过滤器于是就有一个疑问,关于这些过滤器的访问顺序是怎样的,今天就以一个demo来进行测试准备阶段过滤器工厂类以此为模板,复制出几份就可以了,注意…

Java 线程状态流转

Java 线程一共有 6 种状态: NEW:新建状态,当一个线程被创建完成,还没有调用 start() 方法时,是这种状态。RUNNABLE:可运行状态,当一个线程正在正常地执行 run() 中的代码时,是这种状…

达梦数据库导入oracle数据_达梦数据库和oracle数据的一些区别

近期我在考达梦的dca发现有一些和oracle不同的地方,由于我是oracleDBA在维护达梦数据库的时候有需要注意的地方,现在分享一下2个数据库的一些区别。1、登陆的区别oracle:如果sys的密码忘记可以用操作系统验证方式登陆修改密码。dm:达梦数据库如果忘记了s…

Fail-fast 和 Fail-safe 机制

fail-fast 和 fail-safe 的区别 从字面意思来看 fail-fast 是快速失败,fail-safe 是安全失败,这都是集合类对于并发读写时的一种应对机制。 fail-fast,广泛应用于 java.util 下的集合类中,其机制为在使用迭代器遍历的过程中&…

【java8新特性】——lambda表达式与函数式接口详解(一)

一、简介 java8于2014年发布,相比于java7,java8新增了非常多的特性,如lambda表达式、函数式接口、方法引用、默认方法、新工具(编译工具)、Stream API、Date Time API、Optional等 。 当前很多公司的老产品依然使用的…

详解 ConcurrentHashMap

文章目录ConcurrentHashMap 的底层数据结构?ConcurrentHashMap 的带参构造方法的流程?ConcurrentHashMap 的 put 方法的流程?ConcurrentHashMap addCount 方法的流程是怎样的呢?ConcurrentHashMap transfer 方法的流程是怎样的呢?Concurren…

js 二叉树图形_js数据结构和算法(三)二叉树

二叉树的概念二叉树(Binary Tree)是n(n>0)个结点的有限集合,该集合或者为空集(空二叉树),或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树的二叉树组成。二叉树的特点每个结点最多有两棵子树,所以二叉树中不存在度大于…

【java8新特性】——Stream API详解(二)

一、简介 java8新添加了一个特性:流Stream。Stream让开发者能够以一种声明的方式处理数据源(集合、数组等),它专注于对数据源进行各种高效的聚合操作(aggregate operation)和大批量数据操作 (bulk data op…

Spring bean 不被 GC 的真正原因

概述 自从开始接触 Spring 之后,一直以来都在思考一个问题,在 Spring 应用的运行过程中,为什么这些 bean 不会被回收? 今天深入探究了这个问题之后,才有了答案。 思考点 大家都知道,一个 bean 会不会被回…

ad域时间源配置_域控制器server2012时间同步NTP配置

一、域控配置1.修改注册表,设置域控服务器名称2.设置组策略,启动NTP服务器3.域策略中设置windows time服务自动启动二、服务端配置(Ntp服务器,客户端将根据这台服务器的时间进行同步)1、微软键R键,进入“运行”,输入“…

【java8新特性】——Optional详解(三)

一、简介 Optional类是Java8为了解决null值判断问题,借鉴google guava类库的Optional类而引入的一个同名Optional类,使用Optional类可以避免显式的null值判断(null的防御性检查),避免null导致的NPE(NullPo…

不使用 + 和 - 运算符计算两整数之和

问题概述 不使用运算符 和 -,计算两整数之和 思考 不使用 和 - ,那就只能想到用位运算来处理了。思路如下: 两数进行 ^(异或运算),可以得到两个数在相同位上数值不同的相加结果两数进行 &&#x…

vts传感器采取船舶的_详解虎门大桥监测系统:传感器与物联网功不可没

来源:传感器专家网近日,虎门大桥“虎躯一震”给全国人民来了个“深呼吸”。虎门大桥是广东沿海地区重要的交通枢纽,始建于1992年,1997年通车至今,大桥一直都十分平稳。但在5月5日下午,虎门大桥发生异常抖动…

宝塔安装sqlserver_linux宝塔面板安装安装 pdo_sqlsrv扩展

第一步安装源curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/mssqlrelease.repo第二步安装驱动yum install msodbcsql mssql-tools unixODBC-devel第三步下载pdo-sqlsrv源码wget http://pecl.php.net/get/pdo_sqlsrv-5.6.1.tgztar -zxvf …

【java8新特性】——方法引用(四)

一、简介 方法引用是java8的新特性之一&#xff0c; 可以直接引用已有Java类或对象的方法或构造器。方法引用与lambda表达式结合使用&#xff0c;可以进一步简化代码。 来看一段简单代码&#xff1a; public static void main(String[] args) {List<String> strList Ar…

MySQL 排名函数.md

概述 MySQL 自带的排名的函数&#xff0c;主要有&#xff1a; row_number()rank()dense_rank()ntile() 测试数据 测试数据如下所示&#xff1a; row_number() 函数 用法如下&#xff1a; SELECT row_number() OVER (ORDER BY Salary DESC) row_num,Salary FROMEmployee查…

【java8新特性】——默认方法(五)

一、简介 默认方法是指接口的默认方法&#xff0c;它是java8的新特性之一。顾名思义&#xff0c;默认方法就是接口提供一个默认实现&#xff0c;且不强制实现类去覆写的方法。默认方法用default关键字来修饰。 默认方法可以解决的痛点&#xff1a; 在java8之前&#xff0c;修…

Java 序列化总结.md

概述 序列化&#xff1a;将对象写入到 IO 流中反序列化&#xff1a;从 IO 流中恢复对象 实现方法 实现 Serializable 或者 Externalizable Serializable&#xff1a;标记接口&#xff0c;不用实现任何方法&#xff0c;可以指定序列化 IDExternalizable&#xff1a;增强的序…