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处理⽅式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 浅谈java对象结构 对象头 Markword

    浅谈java对象结构 对象头 Markword

    这篇文章主要介绍了浅谈java对象结构 对象头 Markword,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10
  • Java线程状态变换过程代码解析

    Java线程状态变换过程代码解析

    这篇文章主要介绍了Java线程状态变换过程代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • Java中String对象的深入理解

    Java中String对象的深入理解

    String对象作为Java语言中重要的数据类型之一,是我们平时编码最常用的对象之一,因此也是内存中占据空间最大的一个对象,然而很多人对它是一知半解,今天我们就来好好聊一聊这个既熟悉又陌生的String,需要的朋友可以参考下
    2023-05-05
  • java进行文件读写操作详解

    java进行文件读写操作详解

    这篇文章主要介绍了java进行文件读写操作详解的相关资料,需要的朋友可以参考下
    2014-10-10
  • JAVA垃圾收集器与内存分配策略详解

    JAVA垃圾收集器与内存分配策略详解

    这篇文章介绍了JAVA垃圾收集器与内存分配策略,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2015-07-07
  • 使用Spring初始化加载InitializingBean()方法

    使用Spring初始化加载InitializingBean()方法

    这篇文章主要介绍了使用Spring初始化加载InitializingBean()方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • java使用正则表达式过滤html标签

    java使用正则表达式过滤html标签

    本篇文章主要介绍了java正则表达式过滤html标签,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-11-11
  • Mybatis传递多个参数进行SQL查询的用法

    Mybatis传递多个参数进行SQL查询的用法

    本文给大家介绍Mybatis传递多个参数进行SQL查询的用法的相关知识,本文还给大家介绍了mybatis通过Map传递多个参数和JavaBean传递多个参数,本文介绍的非常详细,具有参考借鉴价值,感兴趣的朋友一起学习吧
    2016-06-06
  • 详解java各种集合的线程安全

    详解java各种集合的线程安全

    这篇文章主要介绍了详解java各种集合的线程安全,小编觉得挺不错的,这里分享给大家,供需要的朋友参考。
    2017-10-10
  • 轻松掌握Java适配器模式

    轻松掌握Java适配器模式

    这篇文章主要帮助大家轻松掌握Java适配器模式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09

最新评论