自动拆箱调用方法原理

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

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

我们一般使用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 检查的布尔值,不会引发任何问题。

相关文章
|
9月前
|
Java Shell Linux
解决 centos下执行sh文件报错“/bin/bash^M: 坏的解释器:没有那个文件或目录” 问题
解决 centos下执行sh文件报错“/bin/bash^M: 坏的解释器:没有那个文件或目录” 问题
1185 0
|
6月前
|
存储 Java 测试技术
阿里巴巴java开发手册
这篇文章是关于阿里巴巴Java开发手册的整理,内容包括编程规约、异常日志、单元测试、安全规约、MySQL数据库使用以及工程结构等方面的详细规范和建议,旨在帮助开发者编写更加规范、高效和安全的代码。
|
6月前
|
SQL Java 数据库连接
成功解决:was not registered for synchronization because synchronization is not active
这篇文章是关于解决Mybatis在同步过程中出现"was not registered for synchronization because synchronization is not active"错误的技术博客。
成功解决:was not registered for synchronization because synchronization is not active
|
XML SQL Java
Maven的三种打包方式(jar、shade、assembly)
Maven的三种打包方式(jar、shade、assembly)
4263 0
|
JSON 数据格式
sonar代码质量检测告警“static“ base class members should not be accessed via derived types
sonar代码质量检测告警“static“ base class members should not be accessed via derived types
870 0
sonar代码质量检测告警“static“ base class members should not be accessed via derived types
|
监控 NoSQL Java
Spring Boot 2.3.2 发布,解决 Too many open files 导致的应用宕机问题
Spring Boot 2.3.2 发布,解决 Too many open files 导致的应用宕机问题
818 0
Spring Boot 2.3.2 发布,解决 Too many open files 导致的应用宕机问题
|
5月前
|
Ubuntu 安全 程序员
一文带你了解软件版本号
【9月更文挑战第3天】
879 12
一文带你了解软件版本号
|
存储 缓存 Java
Sonar扫描之SonarScanner介绍
Sonar扫描之SonarScanner介绍
1296 0
|
7月前
|
存储 监控 算法
探索Java虚拟机:深入理解JVM内存模型和垃圾回收机制
在Java的世界中,JVM是核心所在,它不仅承载着代码的运行,还管理着内存资源。本文将带你深入了解JVM的内存模型和垃圾回收机制,通过具体数据与案例分析,揭示它们对Java应用性能的影响,并探讨如何优化JVM配置以提升效率。
|
8月前
|
安全 Java
比较java枚举成员使用equal还是==
比较java枚举成员使用equal还是==
157 0

热门文章

最新文章