java中的自动拆装箱与缓存(Java核心技术阅读笔记)
最近在读《深入理解java核心技术》,对于里面比较重要的知识点做一个记录!
众所周知,Java是一个面向对象的语言,而java中的基本数据类型却不是面向对象的!为了解决这个问题,Java为每个基本数据类型引入一个对应的类,称为包装类!
byte -- Byte boolean -- Boolean short -- Short char -- Character
int -- Integer long -- Long float -- Float double -- Double
为什么需要包装类?
因为java是面向对象的语言,很多地方需要使用对象而不是基本数据类型。比如,在集合类中,无法将int,double放进去,因为集合容器要求的元素是object类型。
装箱:把基本数据类型转换成包装类的过程
拆箱:把包装类换成基本数据类型的过程
自动拆箱:将基本数据类型自动转换成对应的包装类
自动装箱:将包装类自动转换成对应的基本数据类型
自动拆箱与自动装箱的原理:
public static void main(String[] args){
Integer integer = 1;//装箱
int i = integer;//拆箱
}
自动装箱都是通过包装类的valueOf()方法实现的,自动拆箱都是通过包装类对象的xxxvalue()方法实现的。
在那些场景下,java会自动拆装箱?
场景一:将基本数据类型放入集合类
把基本数据类型放入集合类
import java.util.ArrayList;
import java.util.List; public class demo2 {
public static void main(String[] args){
List<Integer> list = new ArrayList<>();
for(int i = 0;i < 10 ; i++){
list.add(i);
}
System.out.println(list);
}
}

场景二:包装类和基本类型的大小比较
包装类与基本数据类型进行比较运算,是先将包装类拆箱成基本数据类型,然后再进行比较
场景三:包装类的运算
两个包装类会被自动拆箱成基本类型进行计算
场景四:自动拆装箱与缓存
public class demo1 {
public static void main(String[] args){
Integer integer1 = 22;
Integer integer2 = 22;
if(integer1 == integer2){
System.out.println("integer1 == integer2");
}else{
System.out.println("integer1 != integer2");
}
Integer integer3 = 300;
Integer integer4 = 300;
if(integer3.equals(integer4)){
System.out.println("integer3 == integer4");
}else{
System.out.println("integer3 != integer4");
}
}
}
在java中==表示对象引用,而equals表示比较的值
所以上述结果都为true,如果第二个改为==结果就为false,原因是和Integer中的缓存机制有关,当需要进行自动装箱时,如果数字在-128-127之间,则会直接使用缓存中的对象,而不是重新创建一个对象。
java中的自动拆装箱与缓存(Java核心技术阅读笔记)的更多相关文章
- 一文读懂什么是Java中的自动拆装箱
基本数据类型 基本类型,或者叫做内置类型,是Java中不同于类(Class)的特殊类型.它们是我们编程中使用最频繁的类型. Java是一种强类型语言,第一次申明变量必须说明数据类型,第一次变量赋值称为 ...
- Java中的自动拆装箱(转)
出处: 一文读懂什么是Java中的自动拆装箱 本文主要介绍Java中的自动拆箱与自动装箱的有关知识. 基本数据类型 基本类型,或者叫做内置类型,是Java中不同于类(Class)的特殊类型.它们是我 ...
- 什么是Java中的自动拆装箱
1.基本数据类型 基本类型,或者叫做内置类型,是Java中不同于类(Class)的特殊类型.它们是我们编程中使用最频繁的类型. Java是一种强类型语言,第一次申明变量必须说明数据类型,第一次变量赋值 ...
- 如何理解Java中的自动拆箱和自动装箱?
小伟刚毕业时面的第一家公司就被面试官给问住了... 如何理解Java中的自动拆箱和自动装箱? 自动拆箱?自动装箱?什么鬼,听都没听过啊,这...这..知识盲区... 回到家后小伟赶紧查资料,我透,这不 ...
- Java中的自动拆箱装箱(Autoboxing&Unboxing)
一.基本类型打包器 1.基本类型:long.int.double.float.boolean 2.类类型:Long.Integer.Double.Float.Boolean 区别:基本类型效率更高,类 ...
- Java数据类型和自动拆装箱
1.java的数据类型:基本数据类型(8种)和引用数据类型. 基本数据类型: 类型 boolean byte short char int long float double 位 1 8 16 16 ...
- Java包装类的自动拆装箱
题目: Integer i = 42; Long l = 42l; Double d = 42.0; 下面为true的是 A.(i == l) B.(i == d) C.(l == d) D.i.eq ...
- Java的自动拆/装箱
作者:Alvin 关键字:语法糖 类 对象 参考 Java 中的语法糖 语法糖--这一篇全了解 浅谈 Integer 类 什么是Java中的自动拆装箱 深入剖析Java中的装箱和拆箱 前言 我们知道, ...
- java自动拆装箱
介绍 Java 5增加了自动装箱与自动拆箱机制,方便基本类型与包装类型的相互转换操作.(关于基本类型与包装类型之前有记录过https://www.cnblogs.com/xiuzhublog/p/12 ...
随机推荐
- python sphinx(文档生成器)入门
简介 Sphinx 是一个 文档生成器 ,您也可以把它看成一种工具,它可以将一组纯文本源文件转换成各种输出格式,并且自动生成交叉引用.索引等.也就是说,如果您的目录包含一堆 reStructuredT ...
- for(int i=0;i<1000;i++)与 for(int i=1;i<=1000;i++)。 if ( i%500){}//前者表示0-501一个循环,后者1-500一个循环
`package com.Itbz; import java.sql.Connection; import java.sql.PreparedStatement; /** 向mysql数据库批量添加数 ...
- 【安全通告】关于 DolphinScheduler 漏洞情况的说明
点击上方 蓝字关注我们 [安全通报] [影响程度:低] Apache DolphinScheduler 社区邮件列表最近通告了 1 个漏洞,考虑到有很多用户并未订阅此邮件列表,我们特地在此进行情况说明 ...
- 金秋十月 - Apache DolphinScheduler 收获 2 位新 Committer
点击上方蓝字关注 Apache DolphinScheduler Apache DolphinScheduler(incubating),简称"DS", 中文名 "海豚调 ...
- Flask像Jenkins一样构建自动化测试任务
flask这个框架很轻量,做一些小工具还是可以很快上手的. 1.自动化 某一天你入职了一家高大上的科技公司,开心的做着软件测试的工作,每天点点点,下班就走,晚上陪女朋友玩王者,生活很惬意. 但是美好时 ...
- Luogu3426 [POI2005]SZA-Template (KMP)(未完成)
未理解透,鬼知道怎么A的 蒟蒻交了个乱猜贪心搞了10pts,一翻题解群佬乱舞,最后DP解决 $\exists i - next[i] <= j, f[j] = f[next[i]] $ #inc ...
- Luogu3871 [TJOI2010]中位数 (平衡树)
"#define int long long" 导致100pts \(\rightarrow\) 80pts #include <iostream> #include ...
- Dynamic CRM一对多关系的数据删除时设置自动删除关联的数据
在业务实体中主子表非常常见,然后子表可能有会有自己的子表或者多对多关系,在删除的业务场景下,删除主数据,剩余的子数据就成了脏数据, 之前的做法是,监听主表的删除事件,然后在插件中找到其下的子表数据然后 ...
- 你必须学UML之理论篇
1.前言 对于当前社会背景下从事软件开发的工作者而言,"写代码"实际上并不是唯一的工作.特别在一些中小型的企业当中,这些企业往往对于开发者的要求,不单单停留在写代码完成相应功能上, ...
- linux 3个快捷方式
Ctrl+c组合键:当同时按下键盘上的Ctrl和字母c的时候,意味着终止当前进程的运行.假如执行了一个错误命令,或者是执行某个命令后迟迟无法结束,这时就可以冷静地按下Ctrl+c组合键,命令行终端的控 ...