浅析Java布尔类型引起的空指针问题:boolean与Boolean的区别与使用、boolen赋值为null和Boolean作为 if 判断条件的2种空指针情况

一、问题背景

  发现有个布尔类型的参数,不传时总会报空指针,奇怪,后来发现原因

  MyBatis 的 @Param 用的 boolean 接参的,如:@Param("vip") boolean vip 需要改成这样即可:@Param("vip") Boolean vip

二、原因解析

  Java 中的布尔类型有两个:基本类型 boolean 和 包装类型 Boolean,用于表示true 或 false。在使用这两种布尔类型时,需要注意,稍有不当,就会产生空指针异常。所以当遇到空指针异常时,需要先看一下有没有布尔类型的参数。

1、Boolean 和 boolean 的区别

  boolean 是基本类型,Boolean 是包装类型

  boolean 取值为true/false,Boolean 取值为true/false/null

  作为属性时,boolean 默认值为 false,Boolean 默认值为 null

2、布尔产生的空指针

复制代码
// 创建一个Switch 类,定义两种布尔类型的属性
    public class Switch{ 
         private Boolean status;
         private boolean isOn;
        // setters, getters, toString...
    }

// 测试默认值
    @Test
    public void test_default(){ 
        System.out.println(new Switch());
    }
    // 输出Switch{status=null, isOn=false}
复制代码

3、空指针的情况:boolen赋值为null

  虽然在编译器中,布尔基本类型 boolean 不能直接赋值为null,编译器会提示错误,但是可以间接赋值为 null,当间接赋值为null时,便会抛出空指针异常。

    @Test(expected = NullPointerException.class)
     public void test_null(){ 
         Switch s = new Switch();
         boolean b = s.getStatus();
     }

4、空指针的情况:Boolean作为 if 判断条件

  java 中boolean 类型的变量可以直接作为 if 的判断表达式,但是当Boolean作为判断表单式时,需要保证Boolean非空,否则会抛出空指针异常

复制代码
    @Test(expected = NullPointerException.class)
     public void test_null(){ 
         Switch s = new Switch();
         // boolean类型可直接作为判断表达式
         if (!s.isOn) { 
             System.out.println("isOne = false");
         }
         // 因为status 是Boolean, 所以编译器不会报错. 若是其它类型, 则编译器会报错
         // 由于status 值为null, 所以会抛出空指针异常
         if (s.getStatus()) { 
             System.out.println();
         }
     }
复制代码

 

posted @   古兰精  阅读(3881)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示