• 【Java基础夯实】变量声明选择包装类还是基本类型有哪些讲究?


    🧑‍💻作者名称:DaenCode
    🎤作者简介:CSDN实力新星,后端开发两年经验,曾担任甲方技术代表,业余独自创办智源恩创网络科技工作室。会点点Java相关技术栈、帆软报表、低代码平台快速开发。技术尚浅,闭关学习中······
    😎人生感悟:尝尽人生百味,方知世间冷暖。
    📖所属专栏:Java基础夯实


    在这里插入图片描述


    专栏推荐

    • 专门为Redis入门打造的专栏,包含Redis基础知识、基础命令、五大数据类型实战场景、key删除策略、内存淘汰机制、持久化机制、哨兵模式、主从复制、分布式锁等等内容。链接>>>>>>>>>《Redis从头学》
    • 专门为RabbitMQ入门打造的专栏,持续更新中。。。。。。。。链接>>>>>>>《图解RabbitMQ》

    🌟前言

    在日常开发中,都离不开变量的声明,那么我们应该如何选择基本数据类型还是包装类型呢?


    🌟认识包装类

    介绍

    个人理解:包装类就是将基本数据类型封装其对应的对象,并赋予了一些基本数据类型没有的特性。

    包装类基本类型
    Booleanboolean
    Bytebyte
    Characterchar
    Shortshort
    Integerint
    Longlong
    Floatfloat
    Doubledouble

    特性

    自动装箱、拆箱

    自动拆箱、装箱,自JDK1.5之后支持,在此之前都是手动装箱、拆箱,在编译时期进行自动类型的转换。注意拆装箱的箱子是指=左侧,也就是往=左侧拆箱装箱

    • 自动拆箱:将包装类型变量赋值给基本数据类型变量。
    • 自动装箱:将基本数据类型赋值给包装类型变量。
    //手动装箱
    int a=10;
    Integer b=Integer.valueOf(a);
    //手动拆箱
    int c=b.intValue();
    //自动装箱
    Integer a=10;
    //自动拆箱
    int b=a;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    额外的方法、常量

    提高了一些其对应基本数据类型的操作方法,还有额外的静态常量MAX_VALUE、MIN_VALUE来取出其取值范围的最大最小值,还有转换成各种进制字符串的方法。下图以Integer类为例:
    在这里插入图片描述
    下表为各个包装类通用的方法。xxx为其类型。

    方法名称描述
    xxxValue()将包装类型转换为基本数据类型的值。
    parseXxx(String s)将字符串解析为相应的包装类型的值。
    valueOf(Xxx x)valueOf(String s)将基本数据类型或字符串转换为相应的包装类型的对象。
    toString()返回此包装类型对象的字符串表示形式。
    equals(Object obj)比较两个对象是否相等。
    compareTo(Xxx x)与另一个同类型的对象进行比较。
    hashCode()返回对象的哈希码值。
    getClass()返回对象的运行时类。

    泛型、集合支持

    可以支持在泛型参数或者集合中使用。

    默认值为null

    因包装类为对象,因此未被分配空间时,其初始化为null。


    🌟如何选择?

    我们来看一下阿里巴巴代码规范中有关这部分的说明,通过1、2两点可以理解,假如数据库中查找出的结果为null,而我们用基本数据类型接受返回值,那么就会触发自动拆箱操作并抛出NPE。
    在这里插入图片描述
    总结一下

    1. 包装类可以在集合、泛型中使用,而基本类型不可以。
    2. 根据业务场景判断是否需要包装类,注意包装类的使用,其拆箱装箱也会影响性能
    3. 根据业务场景判断某变量是否存在null的情况。如果存在,那么则使用包装类。

    🌟两者区别

    区别基本数据类型包装类
    数据类型int、char、boolean 等Integer、Character、Boolean 等
    存储方式栈内存堆内存
    可空性不可为 null可为 null
    自动装箱与自动拆箱不支持支持
    集合框架的使用不可作为集合元素类型可作为集合元素类型

    🌟写在最后

    有关于变量声明选择包装类还是基本类型有哪些讲究?到此就结束了。感谢大家的阅读,希望大家在评论区对此部分内容散发讨论,便于学到更多的知识。


    请添加图片描述

  • 相关阅读:
    第十届MathorCup高校数学建模挑战赛-A题:无车承运人平台线路定价问题
    Python __dict__样例
    企业电子招投标采购系统——功能模块&功能描述+数字化采购管理 采购招投标
    C#实现WMI获取硬盘参数
    基于CMake的C++项目管理实践
    【复旦邱锡鹏教授《神经网络与深度学习公开课》笔记】神经元和人工神经网络
    jsp 上传文件及实体信息,ajax post 请求(formdata)报错400<======>前后端代码示例
    Ajax学习笔记第8天
    基于ACS40核心板的串口图传设计
    扫地机器人的“新故事”,从“第三次革命”开始
  • 原文地址:https://blog.csdn.net/2302_79094329/article/details/133176652