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

Java基础 | 基本类型与引用类型使用规范

Java基础 | 基本类型与引用类型使用规范

  • 前言
  • 一、核心原则(4大准则)
  • 二、快速查询表(场景-类型对应)
  • 三、核心使用规范(分类型明细)
    • 1. 引用类型(适配null场景)
      • 场景1:数据库实体类(POJO/DO)
      • 场景2:Mapper接口入参
      • 场景3:数据传输对象(DTO/VO)
      • 场景4:业务层单字段查询返回
      • 场景5:框架参数校验/JSON序列化
    • 2. 基本类型(适配非null场景)
      • 场景1:Mapper接口返回受影响行数
      • 场景2:局部计算/临时变量
      • 场景3:明确非null的业务参数
      • 场景4:常量/固定值定义
  • 四、特殊场景处理建议

前言

虽然自动装箱 / 拆箱可实现类型混用,但会产生不必要的性能损耗。
应按场景精准选择类型,避免依赖该机制。

一、核心原则(4大准则)

  • 安全优先:数据存储/流转场景,优先规避null值风险
  • 效率适配:局部计算/明确非null场景,兼顾性能轻量化
  • 统一一致:项目内遵循同一标准,不混用水准
  • 语义贴合:类型选择匹配业务场景,见类型知用途

二、快速查询表(场景-类型对应)

应用场景推荐类型核心依据
POJO/DO实体类属性引用类型兼容数据库null值
Mapper接口入参引用类型匹配实体类,防转换异常
DTO/VO传输对象引用类型适配接口可选字段
单字段查询返回引用类型区分“无结果”和默认值
增删改返回行数基本类型int非null整数,语义直观
局部计算/循环基本类型轻量化,无装箱冗余
必传业务参数基本类型明确非null,简洁高效
常量定义基本类型固定值,无null风险

三、核心使用规范(分类型明细)

1. 引用类型(适配null场景)

场景1:数据库实体类(POJO/DO)

  • 规范:全字段强制使用引用类型
  • 正确示例:
private Integer userId;   // 主键ID(可能为null,如未保存时)
private Boolean isActive; // 状态(可能未设置)
private String userName;  // 用户名(字符串本身为引用类型)
  • 错误示例:private int userId; private boolean isActive;
  • 关键说明:兼容数据库字段null值,避免查询/存储时抛出空指针异常

场景2:Mapper接口入参

  • 规范:与实体类属性类型保持一致,优先用引用类型
  • 正确示例:
List<User> queryUser(Integer id, String userName); // id可为null(查全部)
  • 错误示例:List<User> queryUser(int id, String userName);
  • 关键说明:防止传入null时触发基本类型自动转换异常

场景3:数据传输对象(DTO/VO)

  • 规范:所有属性统一用引用类型
  • 正确示例:
public class UserVO {private Integer age;    // 年龄(可选字段)private Boolean isVip;  // VIP状态(可能未开通)private Date createTime;// 创建时间(可能未赋值)
}
  • 错误示例:private int age; private boolean isVip;
  • 关键说明:明确区分“未传值”(null)和“默认值”,适配接口传输场景

场景4:业务层单字段查询返回

  • 规范:查询单个字段时用引用类型
  • 正确示例:
Integer getUserAge(Long userId); // 用户不存在时返回null
Boolean checkVipStatus(Long userId); // 未查询到时返回null
  • 错误示例:int getUserAge(Long userId); boolean checkVipStatus(Long userId);
  • 关键说明:避免用默认值(0/false)掩盖“查询无结果”的业务语义

场景5:框架参数校验/JSON序列化

  • 规范:需区分null和默认值时,用引用类型
  • 正确示例:
@NotNull Integer status; // 校验“必须传值”,null则触发校验失败
@Min(1) Integer count;   // 最小值1,null不触发(可选字段)
  • 错误示例:@NotNull int status; @Min(1) int count;
  • 关键说明:框架可精准识别“未传值”和“传默认值”,校验逻辑更严谨

2. 基本类型(适配非null场景)

场景1:Mapper接口返回受影响行数

  • 规范:增删改操作返回行数用int
  • 正确示例:
int saveOrder(Order order); // 返回插入成功的行数(必为非null)
int deleteUserById(Long id); // 返回删除成功的行数
  • 错误示例:Integer saveOrder(Order order);
  • 关键说明:MyBatis等框架返回行数必为整数,int语义更直观,无性能损耗

场景2:局部计算/临时变量

  • 规范:方法内临时计算、循环计数等用基本类型
  • 正确示例:
int sum = a + b; // 两数求和(无null风险)
double totalAmount = price * quantity; // 金额计算
int i = 0; for(; i < list.size(); i++) {} // 循环计数
  • 错误示例:Integer sum = a + b; Double totalAmount = price * quantity;
  • 关键说明:避免装箱拆箱冗余,提升计算效率

场景3:明确非null的业务参数

  • 规范:必填、固定值参数用基本类型
  • 正确示例:
int pageNum = 1; // 页码(必传,最小为1)
int pageSize = 10; // 每页条数(固定可选值)
int phoneLength = 11; // 手机号长度(固定规则)
  • 错误示例:Integer pageNum = 1; Integer phoneLength = 11;
  • 关键说明:业务上明确非null,用基本类型更简洁

场景4:常量/固定值定义

  • 规范:常量定义优先用基本类型
  • 正确示例:
public static final int MAX_SIZE = 100; // 最大容量(固定值)
public static final boolean DEFAULT_FLAG = true; // 默认状态
  • 错误示例:public static final Integer MAX_SIZE = 100;
  • 关键说明:常量无null场景,基本类型更符合语义

四、特殊场景处理建议

  • 非空约束+业务强制非null:可使用基本类型,但需团队书面确认并备注
  • 框架兼容优先:MyBatis-Plus、Spring Validation等框架有明确要求时,遵循框架规范
  • 避免过度包装:局部变量无需刻意用引用类型,防止性能浪费
  • 避免依赖自动装箱拆箱:该机制虽简化编码,但会隐性消耗性能,非必要场景坚决不用。
  • 团队规范至上:已有项目规范优先,不单独打破统一标准

引用类型的核心是“安全兼容”,覆盖数据存储、流转等可能出现null的场景;
基本类型的核心是“高效简洁”,适用于明确非null的局部计算、常量等场景。
按场景精准选择,既能减少空指针异常,又能避免自动装箱拆箱带来的性能损耗,是 Java 项目开发的基础规范。

http://www.dtcms.com/a/582519.html

相关文章:

  • 香港1核2G云服务器当网站服务器够用不?
  • 用Python来学微积分36-牛顿 - 莱布尼茨公式的深度解析
  • 网站建设规章制度软件app开发需要多少钱
  • 网站建设外出考察信息家在深圳房网论坛首页
  • 测试开发工程师面经准备(sxf)
  • 2026商业航天展,中国商业航天规模化发展的加速器
  • 网站建设与推广范文防下载 的视频网站 怎么做
  • TrueNas Scale配置immich集成GPU硬件加速,用于智能模型,人脸识别,OCR文本识别加速
  • 旅游网站建设规划报告怎么写个人做外贸网站违法吗
  • FLUX1. 代码解读
  • 朔州路桥建设有限责任公司网站新乡发布最新通告
  • 基于黏菌算法的路径规划
  • Java--HTTP(上)
  • 【软考架构】软件测试-白盒测试方法中的几种测试准则(覆盖准则)
  • 网站建设类公司排名中国建筑人才网怎么样
  • Dify 迁移后常见问题解决方案与使用腾讯云cos上传文件 FILES_URL缺失
  • 郑州网站建设培训网站域名备案认证
  • 专业制作网站公司哪家好软件开发项目总结
  • 切换海外动态IP的方法
  • 设计业务网站外贸自建站类型
  • 网站建设在哪里发布网络优化工程师工资
  • Linux环境下的C语言编程(十七)
  • JAVA算法练习题day64
  • 小华HC32F460串口性能问题与处理思路
  • Java_Hashtable使用及扩容
  • Django序列化器
  • 跳表与B+树
  • 上海外贸网站优化自己做提卡网站
  • 学习日报 20251107|Nacos 注册同一服务多实例架构图
  • 营销型网站建设运营苏州园区