最近在读《深入理解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. Redis 5 种基本数据结构(String、List、Hash、Set、Sorted Set)详解 | JavaGuide

    首发于:Redis 5 种基本数据结构详解 - JavaGuide 相关文章:Redis常见面试题总结(上) . Redis 5 种基本数据结构(String.List.Hash.Set.Sorted ...

  2. mysql导出bug备注

    注:yiicms库和area表均存在

  3. C# 虚方法、抽象方法

    一.虚方法(virtual) 作用:当有一个定义在类中的函数需要在继承类中实现时,可以使用虚方法. 示例: class Person { public virtual void XXX() { Con ...

  4. AgileFontSet迅捷字体设置程序

    AgileFontSet迅捷字体设置程序-用户手册  AgileFontSet的完整代码,参见 https://www.cnblogs.com/ybmj/p/11683291.html 1.程序特点和 ...

  5. jQuery基础入门(二)

    jQuery 效果 显示和隐藏 在 jQuery 中可以使用 hide() 和 show() 方法来隐藏和显示 HTML 元素,以及使用 toggle() 方法能够切换 hide() 和 show() ...

  6. LuoguP5022 旅行 (割点,基环树)

    // luogu-judger-enable-o2 #include <cstdio> //#include <iostream> #include <cstring&g ...

  7. docker compose搭建redis7.0.4高可用一主二从三哨兵集群并整合SpringBoot【图文完整版】

    一.前言 redis在我们企业级开发中是很常见的,但是单个redis不能保证我们的稳定使用,所以我们要建立一个集群. redis有两种高可用的方案: High availability with Re ...

  8. React的生命周期函数

    概述 在React中,生命周期函数指的是组件在某一个时刻会自动执行的函数 constructor 在类或组件创建的时候被自动执行,我们可以说它是生命周期函数,但它并不是React所特有的,所有的Es6 ...

  9. VM虚拟机安装

    VM虚拟机安装 1.安装vm虚拟机软件 1.1 双击打开虚拟机文件 1.2 根据向导安装 下一步 安装好了 不要着急点完成在 安装目录中有许可证. 1.3激活操作 2.虚拟机原理简介 3. 新建虚拟机 ...

  10. Helm安装ingress-nginx-4.1.4

    Application version 1.2.1 Chart version 4.1.4 获取chart包 helm fetch ingress-nginx/ingress-nginx --vers ...