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

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

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


在这里插入图片描述


专栏推荐

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

文章目录

  • 专栏推荐
  • 🌟前言
  • 🌟认识包装类
    • 介绍
    • 特性
      • 自动装箱、拆箱
      • 额外的方法、常量
      • 泛型、集合支持
      • 默认值为null
  • 🌟如何选择?
  • 🌟两者区别
  • 🌟写在最后

🌟前言

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


🌟认识包装类

介绍

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

包装类基本类型
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;

额外的方法、常量

提高了一些其对应基本数据类型的操作方法,还有额外的静态常量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
自动装箱与自动拆箱不支持支持
集合框架的使用不可作为集合元素类型可作为集合元素类型

🌟写在最后

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


请添加图片描述

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

相关文章:

  • 获取唯一的短邀请码
  • 大词表语言模型在续写任务上的一个问题及对策
  • Spark SQL【电商购买数据分析】
  • Google拟放弃博通自行研发AI芯片 | 百能云芯
  • 一百八十二、大数据离线数仓——离线数仓从Kafka采集、最终把结果数据同步到ClickHouse的完整数仓流程(待续)
  • 掌动智能:卓越性能的API接口测试工具
  • Flutter 基本概念
  • PHP包含读文件写文件
  • uniapp——实现base64格式二维码图片生成+保存二维码图片——基础积累
  • 【二叉树魔法:链式结构与递归的纠缠】
  • FL Studio21.0.3最新中文版下载安装详解
  • 【算法与数据结构】JavaScript实现十大排序算法(一)
  • IntelliJ IDEA使用——插件推荐
  • 编写一个会导致死锁的程序,将怎么解决?
  • Java JVM分析利器JProfiler 结合IDEA使用详细教程
  • 包含日志文件
  • 李航老师《统计学习方法》第2章阅读笔记
  • ruoyi框架修改左侧菜单样式
  • 【已解决】PyCharm里的黄色波浪线
  • 设计模式:策略模式(C++实现)
  • 网络安全深入学习第二课——热门框架漏洞(RCE—Thinkphp5.0.23 代码执行)
  • Pdf文件签名检查
  • web前端之float布局与flex布局
  • expected ‘,’ after expression in R【R错误】
  • 算法|图论 2
  • 使用C#实现服务端与客户端的简陋聊天
  • 生成式模型和判别式模型区别
  • 【kafka实战】03 SpringBoot使用kafka生产者和消费者示例
  • Only file and data URLs are supported by the default ESM loader
  • LeetCode01