Java中关于 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。
下⾯是基本数据类型的初始值

类型初始值
booleabfalse
char/u0000
byte(byte)0
short(short)0
int0
long0L
float0.0f
double0.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);
 }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hello World呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值