【Java基础夯实】变量声明选择包装类还是基本类型有哪些讲究?
🧑💻作者名称:DaenCode
🎤作者简介:CSDN实力新星,后端开发两年经验,曾担任甲方技术代表,业余独自创办智源恩创网络科技工作室。会点点Java相关技术栈、帆软报表、低代码平台快速开发。技术尚浅,闭关学习中······
😎人生感悟:尝尽人生百味,方知世间冷暖。
📖所属专栏:Java基础夯实
专栏推荐
- 专门为Redis入门打造的专栏,包含Redis基础知识、基础命令、五大数据类型实战场景、key删除策略、内存淘汰机制、持久化机制、哨兵模式、主从复制、分布式锁等等内容。
链接>>>>>>>>>
《Redis从头学》 - 专门为RabbitMQ入门打造的专栏,持续更新中。。。。。。。。
链接>>>>>>>
《图解RabbitMQ》
文章目录
- 专栏推荐
- 🌟前言
- 🌟认识包装类
- 介绍
- 特性
- 自动装箱、拆箱
- 额外的方法、常量
- 泛型、集合支持
- 默认值为null
- 🌟如何选择?
- 🌟两者区别
- 🌟写在最后
🌟前言
在日常开发中,都离不开变量的声明,那么我们应该如何选择基本数据类型还是包装类型呢?
🌟认识包装类
介绍
个人理解:包装类就是将基本数据类型封装其对应的对象,并赋予了一些基本数据类型没有的特性。
包装类 | 基本类型 |
---|---|
Boolean | boolean |
Byte | byte |
Character | char |
Short | short |
Integer | int |
Long | long |
Float | float |
Double | double |
特性
自动装箱、拆箱
自动拆箱、装箱,自JDK1.5之后支持,在此之前都是手动装箱、拆箱,在编译时期进行自动类型的转换。
注意拆装箱的箱子是指=左侧,也就是往=左侧拆箱装箱
。
- 自动拆箱:将包装类型变量赋值给基本数据类型变量。
- 自动装箱:将基本数据类型赋值给包装类型变量。
//手动装箱
int a=10;
Integer b=Integer.valueOf(a);
//手动拆箱
int c=b.intValue();
//自动装箱
Integer a=10;
//自动拆箱
int b=a;
额外的方法、常量
提高了一些其对应基本数据类型的操作方法,还有额外的静态常量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。
总结一下:
- 包装类可以在
集合、泛型中使用
,而基本类型不可以。 - 根据业务场景判断是否需要包装类,注意包装类的使用,其
拆箱装箱也会影响性能
。 - 根据业务场景判断某变量
是否存在null的情况
。如果存在,那么则使用包装类。
🌟两者区别
区别 | 基本数据类型 | 包装类 |
---|---|---|
数据类型 | int、char、boolean 等 | Integer、Character、Boolean 等 |
存储方式 | 栈内存 | 堆内存 |
可空性 | 不可为 null | 可为 null |
自动装箱与自动拆箱 | 不支持 | 支持 |
集合框架的使用 | 不可作为集合元素类型 | 可作为集合元素类型 |
🌟写在最后
有关于变量声明选择包装类还是基本类型有哪些讲究?到此就结束了。感谢大家的阅读,希望大家在评论区对此部分内容散发讨论,便于学到更多的知识。