Java中关于 null 的几种处理方式详解

 更新时间:2021年10月25日 09:38:45   作者:Hello World呀  
这篇文章主要介绍了Java中关于 null 的几种处理方式,关于 null ,你应该知道下面这几件事情来有效的了解 null ,从而避免很多由 null 引起的错误,具体细节跟随小编一起学习下吧

对于 Java 程序员来说,空指针⼀直是恼⼈的问题,我们在开发中经常会受到 NullPointerException 的异常。Java 的发明者也承认这是⼀个巨⼤的设计错误。那么关于 null ,你应该知道下⾯这⼏件事情来有效的了解 null ,从⽽避免很多由 null 引起的错误。

在这里插入图片描述

⼤⼩写敏感

⾸先,null 是 Java 中的 关键字 ,像是 public、static、final。它是⼤⼩写敏感的,你不能将 null 写 成 Null 或 NULL,编辑器将不能识别它们然后报错。

在这里插入图片描述

这个问题已经⼏乎不会出现,因为 eclipse 和 Idea 编译器已经给出了编译器提示,所以你不⽤考虑这
个问题。

null 是任何引⽤类型的初始值

null 是所有引⽤类型的默认值,Java 中的任何引⽤变量都将null作为默认值,也就是说所有 Object 类下的引⽤类型默认值都是 null。这对所有的引⽤变量都适⽤。就像是基本类型的默认值⼀样,例如 int的默认值是 0,boolean 的默认值是 false。
下⾯是基本数据类型的初始值

类型 初始值
booleab false
char /u0000
byte (byte)0
short (short)0
int 0
long 0L
float 0.0f
double 0.0d

null 只是⼀种特殊的值

null 既不是对象也不是⼀种类型,它仅是⼀种特殊的值,你可以将它赋予任何类型,你可以将 null 转换为任何类型

public static void main(String[] args) {
 String str = null;
 Integer itr = null;
 Double dou = null;
 Integer integer = (Integer) null;
 String string = (String)null;
 System.out.println("integer = " + integer);
 System.out.println("string = " + string);
}

你可以看到在编译期和运⾏期内,将 null 转换成任何的引⽤类型都是可⾏的,并且不会抛出空指针异常。

null 只能赋值给引⽤变量,不能赋值给基本类型变量。

持有 null 的包装类在进⾏⾃动拆箱的时候,不能完成转换,会抛出空指针异常,并且 null 也不能和基本数据类型进⾏对⽐

public static void main(String[] args) {
 int i = 0;
 Integer itr = null;
 System.out.println(itr == i);
}

使⽤了带有 null 值的引⽤类型变量, instanceof instanceof 操作会返回

public static void main(String[] args) {
 Integer isNull = null;
 // instanceof = isInstance ⽅法
 if(isNull instanceof Integer){
 System.out.println("isNull is instanceof Integer");
 }else{
 System.out.println("isNull is not instanceof Integer");
 }
}

这是 instanceof 操作符⼀个很重要的特性,使得对类型强制转换检查很有⽤静态变量为 null 调⽤静态⽅法不会抛出 NullPointerException。因为静态⽅法使⽤了静态绑定。

使⽤ Null-Safe ⽅法

你应该使⽤ null-safe 安全的⽅法,java 类库中有很多⼯具类都提供了静态⽅法,例如基本数据类型的包装类,Integer , Double 等。例如

public class NullSafeMethod {
 private static String number;
 public static void main(String[] args) {
 String s = String.valueOf(number);
 String string = number.toString();
 System.out.println("s = " + s);
 System.out.println("string = " + string);
 }
}

number 没有赋值,所以默认为null,使⽤ String.valueOf(number) 静态⽅法没有抛出空指针异常,但是使⽤ toString() 却抛出了空指针异常。所以尽量使⽤对象的静态⽅法。

null 判断

你可以使⽤ == 或者 != 操作来⽐较 null 值,但是不能使⽤其他算法或者逻辑操作,例如⼩于或者⼤于。跟SQL不⼀样,在Java中 null == null 将返回 true,如下所示:

public class CompareNull {
 private static String str1;
 private static String str2;
 public static void main(String[] args) {
 System.out.println("str1 == str2 ? " + str1 == str2);
 System.out.println(null == null);
 }
}

到此这篇关于Java中关于 null 的⼏种处理⽅式的文章就介绍到这了,更多相关Java null处理⽅式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot使用Captcha生成验证码

    SpringBoot使用Captcha生成验证码

    这篇文章主要介绍了SpringBoot如何使用Captcha生成验证码,帮助大家更好的理解和学习使用SpringBoot,感兴趣的朋友可以了解下
    2021-04-04
  • SpringMVC 整合SSM框架详解

    SpringMVC 整合SSM框架详解

    这篇文章主要介绍了SpringMVC 整合SSM框架详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • Springboot FatJa原理机制源码解析

    Springboot FatJa原理机制源码解析

    这篇文章主要为大家介绍了Springboot FatJa原理机制源码解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • springboot项目打包成jar包的图文教程

    springboot项目打包成jar包的图文教程

    有时候我们会用IDEA来开发一些小工具,需要打成可运行的JAR包,这篇文章主要给大家介绍了关于springboot项目打包成jar包的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • SpringMVC中转发与重定向的区别浅析

    SpringMVC中转发与重定向的区别浅析

    这篇文章主要给大家介绍了关于SpringMVC中转发与重定向的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • spring-data-redis 动态切换数据源的方法

    spring-data-redis 动态切换数据源的方法

    最近遇到了一个麻烦的需求,我们需要一个微服务应用同时访问两个不同的 Redis 集群,一般情况下我们会怎么处理呢,下面通过场景分析给大家介绍spring-data-redis 动态切换数据源的方法,感兴趣的朋友一起看看吧
    2021-08-08
  • SpringBoot注册Servlet的三种方法详解

    SpringBoot注册Servlet的三种方法详解

    这篇文章主要介绍了SpringBoot注册Servlet的三种方法详解,教你如何Spring Boot 注册 Servlet、Filter、Listener,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-05-05
  • SpringMVC文件上传 多文件上传实例

    SpringMVC文件上传 多文件上传实例

    这篇文章主要介绍了SpringMVC文件上传 多文件上传实例,有需要的朋友可以参考一下
    2014-01-01
  • javaSE基础java自定义注解原理分析

    javaSE基础java自定义注解原理分析

    这篇文章主要介绍了javaSE基础对java自定义注解原理分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多度进步,早日升职加薪
    2021-10-10
  • 前端发送的请求Spring如何返回一个文件详解

    前端发送的请求Spring如何返回一个文件详解

    这篇文章主要给大家介绍了关于前端发送的请求Spring如何返回一个文件的相关资料,文中通过代码介绍的非常详细,对大家的学习或者工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2024-09-09

最新评论