自动拆箱调用方法原理

简介: 自动拆箱调用方法原理

今天分享一个冷门基础小知识

我们一般使用boolean的类型,使用结构控制语句条件表达式的时候都是这样:

if (bar) {
}

此处如果是一个基本类型,也就是boolean的时候,完全ok

但如果是一个包装类型的java.lang.Boolean对象,则在barnull的时候,抛出

java.lang.NullPointerException

这是因为底层调用了java.lang.Boolean#valueOf(boolean)拆箱

此处

@IntrinsicCandidate
public static Boolean valueOf(boolean b) {
    return (b ? TRUE : FALSE);
}

由于添加了@IntrinsicCandidate注解,所以会调用其进行自动拆箱

因此如果是Boolean包装类型,则调用

if (bar) {
}

等同于

if (Boolean.valueOf(bar)) {
}

建议大家不要使用包装类型作为条件语句表达式,此处sonarlint也提到:

https://rules.sonarsource.com/java/RSPEC-5411/

Avoid using boxed “Boolean” types directly in boolean expressions

当盒装类型 java.lang.Boolean 用作表达式来确定控制流时(如 Java 语言规范 §4.2.5 boolean 类型和布尔值中所述),如果值为 null (如 Java 语言规范 §5.1.8 取消装箱转换中定义),它将抛出 NullPointerException

完全避免此类转换并显式处理 null 值会更安全。

但请注意,对于已经过 null 检查的布尔值,不会引发任何问题。

相关文章
|
SQL 监控 druid
springboot-druid数据源的配置方式及配置后台监控-自定义和导入stater(推荐-简单方便使用)两种方式配置druid数据源
这篇文章介绍了如何在Spring Boot项目中配置和监控Druid数据源,包括自定义配置和使用Spring Boot Starter两种方法。
|
NoSQL Java Redis
Spring boot整合Redis实现发布订阅(超详细)
Redis发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收信息。微信,微博,关注系统 Redis客户端可以订阅任意数量的频道
8161 0
Spring boot整合Redis实现发布订阅(超详细)
|
IDE 开发工具
IntelliJ插件开发教程之新建Action
认识Action 在IDE编辑器中可以通过右键打开选项,如下图所示,这里的动作便是Action,同时在顶部的ToolBar也会有相应的Action,如下图所示。可能大家对我这个IDE的UI有点陌生,其实这是2022.3版本的IDEA开启了New UI,NEW UI还是内测中,需要手动开启,设置位置在:Settings->appearance&behavior -> New UI
IntelliJ插件开发教程之新建Action
|
NoSQL 数据可视化 关系型数据库
推荐几个好用的redis可视化工具
推荐几个好用的redis可视化工具
16744 1
|
Web App开发 移动开发 前端开发
前端企业微信服务商第三方应用开发详情流程
前端企业微信服务商第三方应用开发详情流程
613 0
|
XML Java 数据格式
大多数人忽略了的Spring官方项目,Spring Web Services
大多数人忽略了的Spring官方项目,Spring Web Services
1642 0
|
Web App开发 Java 网络安全
PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
3694 0
|
IDE 前端开发 Java
IDE报错 NoSuchFieldError: Class com.sun.tools.javac.tree.JCTree$JCImport does not have member field ‘
IDE报错 NoSuchFieldError: Class com.sun.tools.javac.tree.JCTree$JCImport does not have member field ‘
6310 2
|
存储 Java 测试技术
阿里巴巴java开发手册
这篇文章是关于阿里巴巴Java开发手册的整理,内容包括编程规约、异常日志、单元测试、安全规约、MySQL数据库使用以及工程结构等方面的详细规范和建议,旨在帮助开发者编写更加规范、高效和安全的代码。
|
Ubuntu 安全 程序员
一文带你了解软件版本号
【9月更文挑战第3天】
2914 12
一文带你了解软件版本号