当前位置: 首页 > news >正文

【AI驱动的数据结构:包装类的艺术与科学】

](https://img-home.csdnimg.cn/images/20220524100510.png#pic_center)
🌈个人主页: Aileen_0v0
🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法
💫个人格言:“没有罗马,那就自己创造罗马~”

文章目录

    • 包装类
    • 装箱和拆箱
    • `阿里巴巴面试题`

包装类

  • 在Java中基本数据类型不是继承来自Object,为了在泛型代码中使用基本数据类型,Java给每个基本数据类型都对应到了一个包装类中。
基本数据类型包装类
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter
booleanBoolean

装箱和拆箱

装箱/装包 : 把基本类型转变成包装类型
拆箱/拆包:把一个包装类型转变成基本数据类型
public class Test {public static void main(String[] args) {int a = 10;Integer ii = a ; //自动装箱Integer ii2 = new Integer(10);int b = ii2;//自动拆箱System.out.println(ii);System.out.println(b);}
}

在这里插入图片描述

在这里插入图片描述
通过访问上面代码的字节码文件,我们可以看到装箱的底层逻辑就是通过Integer这个类去调用valueOf这个方法去装箱。

public class Test {public static void main(String[] args) {int a = 10;
//        Integer ii = a ; //自动装箱//根据字节码文件的内容可以将自动装箱的代码写成如下样式:Integer ii = Integer.valueOf(a);//手动装箱
//================================================================================Integer ii2 = new Integer(10);
//        int b = ii2;//自动拆箱int b = ii2.intValue();//手动拆箱double d = ii2.doubleValue();//即使原来不是小数类型也能手动拆箱成小数类型System.out.println(ii);System.out.println(b);System.out.println(d);}
}

在这里插入图片描述


阿里巴巴面试题

    public static void main(String[] args) {Integer ii= 100;Integer ii2 =100;System.out.println(ii == ii2);}

在这里插入图片描述

    public static void main(String[] args) {Integer ii= 200;Integer ii2 =200;System.out.println(ii == ii2);}

在这里插入图片描述

  • 为什么上面的结果一个是true,一个是false,这是为什么呢?

    • 从上面代码中我们可以看到整个过程中都使用到了装箱,通过查看装箱的源代码valueOf
    public static Integer valueOf(int i) {if (i >= IntegerCache.low && i <= IntegerCache.high)return IntegerCache.cache[i + (-IntegerCache.low)];return new Integer(i);}

根据原代码我们可知道:cache是缓存数组,如果我们的i是在这个范围内的,他就会返回这个缓存数组,如果不在他就会再重新创建一个对象。如下图所示:

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
对于100,他是在我们数组的范围内,所以它无需创建对象,只需要在缓存数组中查找即可,这两个装箱的变量他们指向的都是同一个对象的地址所以返回true,而200则需要创建新的对象,这两个变量所指的不是同一个对象,内存地址也不一样,所以返回false。

](https://img-home.csdnimg.cn/images/20220524100510.png#pic_center)
](https://img-home.csdnimg.cn/images/20220524100510.png#pic_center)

http://www.lryc.cn/news/506858.html

相关文章:

  • 初学stm32 --- PWM输出
  • ES6学习Iterator遍历器(七)
  • 重建大师软件做任务提示引擎错误?
  • 【图像分类实用脚本】数据可视化以及高数量类别截断
  • python的is和==运算符
  • 单节点calico性能优化
  • React 19有哪些新特性?
  • 视频生成缩略图
  • 页面无滚动条,里面div各自有滚动条
  • DIY-ESP8266移动PM2.5传感器-带屏幕-APP
  • 【Canvas与技法】椭圆画法
  • 多核CPU调度是咋搞的?
  • 【Jenkins】pipeline 的基础语法以及快速构建一个 jenkinsfile
  • 工作中如何提高技术实力?
  • 画图,matlab,
  • Java虚拟机类加载(解析阶段)[虚方法表的生成以及其存在意义]
  • 电子元器件与电路之-MOS管的介绍和作用
  • python实现word转html
  • nginx模块ngx-fancyindex 隐藏标题中的 / 和遇到的坑
  • 第二十四天 循环神经网络(RNN)LSTM与GRU
  • RocketMQ如何保证消息顺序?
  • LabVIEW实现GSM/GPRS通信
  • 关于如何做技术文档
  • 基于多尺度动态卷积的图像分类
  • RK3576 介绍
  • 如何评估并持续优化AI呼出机器人的使用效果
  • Ubuntu上如何部署Nginx?
  • 制造业4.0:AI与机器人如何重塑生产线
  • ChatGPT与领域特定语言的集成
  • 【记录50】uniapp安装uview插件,样式引入失败分析及解决