最近在读《深入理解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核心技术阅读笔记)的更多相关文章

  1. 一文读懂什么是Java中的自动拆装箱

    基本数据类型 基本类型,或者叫做内置类型,是Java中不同于类(Class)的特殊类型.它们是我们编程中使用最频繁的类型. Java是一种强类型语言,第一次申明变量必须说明数据类型,第一次变量赋值称为 ...

  2. Java中的自动拆装箱(转)

    出处: 一文读懂什么是Java中的自动拆装箱 本文主要介绍Java中的自动拆箱与自动装箱的有关知识.  基本数据类型 基本类型,或者叫做内置类型,是Java中不同于类(Class)的特殊类型.它们是我 ...

  3. 什么是Java中的自动拆装箱

    1.基本数据类型 基本类型,或者叫做内置类型,是Java中不同于类(Class)的特殊类型.它们是我们编程中使用最频繁的类型. Java是一种强类型语言,第一次申明变量必须说明数据类型,第一次变量赋值 ...

  4. 如何理解Java中的自动拆箱和自动装箱?

    小伟刚毕业时面的第一家公司就被面试官给问住了... 如何理解Java中的自动拆箱和自动装箱? 自动拆箱?自动装箱?什么鬼,听都没听过啊,这...这..知识盲区... 回到家后小伟赶紧查资料,我透,这不 ...

  5. Java中的自动拆箱装箱(Autoboxing&Unboxing)

    一.基本类型打包器 1.基本类型:long.int.double.float.boolean 2.类类型:Long.Integer.Double.Float.Boolean 区别:基本类型效率更高,类 ...

  6. Java数据类型和自动拆装箱

    1.java的数据类型:基本数据类型(8种)和引用数据类型. 基本数据类型: 类型 boolean byte short char int long float double 位 1 8 16 16 ...

  7. Java包装类的自动拆装箱

    题目: Integer i = 42; Long l = 42l; Double d = 42.0; 下面为true的是 A.(i == l) B.(i == d) C.(l == d) D.i.eq ...

  8. Java的自动拆/装箱

    作者:Alvin 关键字:语法糖 类 对象 参考 Java 中的语法糖 语法糖--这一篇全了解 浅谈 Integer 类 什么是Java中的自动拆装箱 深入剖析Java中的装箱和拆箱 前言 我们知道, ...

  9. java自动拆装箱

    介绍 Java 5增加了自动装箱与自动拆箱机制,方便基本类型与包装类型的相互转换操作.(关于基本类型与包装类型之前有记录过https://www.cnblogs.com/xiuzhublog/p/12 ...

随机推荐

  1. shell中各种括号的用法

    一.单小括号()1.将某个命令的返回值作为某个变量的值进行传递 #!/bin/bash USER=$(whoami) echo $USER [root@jump ~]# for i in $(seq ...

  2. 什么是 Base64 ?

    Base64 是什么? Base64是一种二进制到文本的编码方式.如果要更具体一点的话,可以认为它是一种将 byte数组编码为字符串的方法,而且编码出的字符串只包含ASCII基础字符,就是包括小写字母 ...

  3. JUC源码学习笔记4——原子类,CAS,Volatile内存屏障,缓存伪共享与UnSafe相关方法

    JUC源码学习笔记4--原子类,CAS,Volatile内存屏障,缓存伪共享与UnSafe相关方法 volatile的原理和内存屏障参考<Java并发编程的艺术> 原子类源码基于JDK8 ...

  4. .NET中MongoDB之CRUD

    参考文档 https://docs.mongoing.com/mongodb-crud-operations https://docs.mongodb.com/manual/crud/ https:/ ...

  5. Ubuntu 20.04安装Docker

    Docker学习系列文章 入门必备:十本你不容错过的Docker入门到精通书籍推荐 day1.全面的Docker快速入门教程 day2.CentOS 8.4安装Docker day3.Windows1 ...

  6. Luogu2073 送花 (平衡树)

    打感叹号处为傻逼处 #include <iostream> #include <cstdio> #include <cstring> #include <al ...

  7. Taurus.MVC WebAPI 入门开发教程8:WebAPI文档与自动化测试。

    系列目录 1.Taurus.MVC WebAPI  入门开发教程1:框架下载环境配置与运行. 2.Taurus.MVC WebAPI 入门开发教程2:添加控制器输出Hello World. 3.Tau ...

  8. 如何快速上手AIRIOT?

    AIRIOT物联网低代码平台,快速构建稳定可靠的物联网系统,丰富的功能库及组件库,具备低成本.高效率.易操作,可扩展等特点,节省物联网项目实施时间及人力成本,支持二次开发.   [六步快速上手,玩儿转 ...

  9. 「JOI 2015 Final」分蛋糕 2

    「JOI 2015 Final」分蛋糕 2 题解 这道题让我想起了新年趣事之红包这道DP题,这道题和那道题推出来之后的做法是一样的. 我们可以定义dp[i][len][1] 表示从第i块逆时针数len ...

  10. HCNP Routing&Switching之MAC地址防漂移

    前文我们了解了二层端口安全技术相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/16631222.html:今天我们来聊一聊MAC地址防漂移技术: 首先我 ...