浅聊Java中的 null 问题

一脸懵的 null

写在开局
偶尔的一次刷题过程中看见一个关于Java语言的null问题,才有关于本篇笔记的思考记录,欢迎大家一起交流…

刷题举例

话不多说, 直接上代码

public class NULL{
    public static void xixi(){
        System.out.print("1");
    }
    //静态方法通过类.方法可以调用
    public static void main(String[] args){
        ((NULL)null).xixi();//结果输出是1
    }
}
public class NULL{
    public static void xixi(){
        System.out.print("1");
    }
    public static void main(String[] args){
        ((String)null).length();//结果报空指针异常
    }
}

关键点: null 可以被强转成任何类型

1. null是Java中的关键字,大小写敏感

和其它的五十几个关键字,保留字一样,它是大小写敏感的,你不能将null写成Null或NULL,编译器将不能识别他们然后报错;

2. null是任何引用类型的默认值

不严格的说是所有object类型的默认值。
就像每种原始类型都有默认值一样,如int默认值为0,boolean的默认值为false;

3. null是特殊的值,null 可以被强转成任何类型

①null既不是对象也不是一种类型,它仅是一种特殊的值,你可以将其赋予任何引用类型;
②你也可以将null转化成任何类型.
在编译和运行时期,将null强制转换成任何引用类型都是可行的,在运行时期都不会抛出空指针异常。如上述代码举例.

4. null可以赋值给引用变量,你不能将null赋给基本类型变量,例如int、double、float、boolean。
5. 任何含有null值的包装类在Java拆箱生成基本数据类型时候都会抛出一个空指针异常。一些程序员犯这样的错误,他们认为自动装箱会将null转换成各自基本类型的默认值,例如对于int转换成0,布尔类型转换成false,但是那是不正确的。
6. 如果使用了带有null值的引用类型变量,instanceof操作将会返回false:
7. 你可以使用或者!=操作来比较null值,但是不能使用其他算法或者逻辑操作,例如小于或者大于。跟SQL不一样,在Java中nullnull将返回true。
8. null和“”并不相等,因为下面的s并没有指向某一块内存,而s1指向了一块空字符串的内存.
  1. 你可能知道不能调用非静态方法来使用一个值为null的引用类型变量。它将会抛出空指针异常,但是你可能不知道,你可以使用静态方法来使用一个值为null的引用类型变量。因为静态方法使用静态绑定,不会抛出空指针异常。

总而言之,记住,null是任何一个引用类型变量的默认值,在java中你不能使用null引用来调用任何的instance方法或者instance变量。

null 在 Java 中是一个特殊的存在,因为它和大名鼎鼎的 NullPointerException(NPE)如影随形。NPE 的发明人 Tony Hoare 曾在 2009 年承认:“Null References 是一个荒唐的设计,就好像我赌输掉了十亿美元”。

写在最后:
如果一个变量当前没有确定要初始化的值,那么 null 就是最佳选择,即所谓的延迟初始化,直到实际使用的时候再赋值为“它实际”的值;
更神奇的是,null 竟然可以被强制转化;

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值