故事背景

---摩诃般若波罗蜜多心经:

观自在菩萨,行深般若波罗蜜多时,照见五蕴皆空,度一切苦厄。舍利子,色不异空,空不异色;色即是空,空即是色。受想行识,亦复如是。舍利子,是诸法空相,不生不灭,不垢不净,不增不减。是故空中无色,无受想行识,无眼耳鼻舌身意,无色声香味触法,无眼界,乃至无意识界,无无明,亦无无明尽,乃至无老死,亦无老死尽。无苦寂灭道,无智亦无得。以无所得故,菩提萨埵。依般若波罗蜜多故,心无挂碍,无挂碍故,无有恐怖。远离颠倒梦想,究竟涅磐,三世诸佛,依般若波罗蜜多故,得阿耨多罗三藐三菩提。故知般若波罗蜜多是大神咒,是大明咒, 是无上咒,是无等等咒,能除一切苦,真实不虚。故说般若波罗蜜多咒,即说咒曰:揭谛揭谛,波罗揭谛,波罗僧揭谛,菩提娑婆诃。

上面的经文总是让我容易冷静下来,可是 java中的null总是让我有点不知所措,下面让我们看看吧!

java中的空null

我们先看几段代码吧

1.例一:null的对象性

public class NullTest {public static void greet() {System.out.println("Hello world!");}public static void main(String[] args) {((NullTest) null).greet();}
}

上面的程序看起来似乎应该抛出NullPointerExceptioin 异常,因为其main 方法

是在常量null 上调用greet 方法,而你是不可以在null 上调用方法的,对吗?

其实编译和运行都没有问题。运行结果为:

Hello world!

2.例二:null的初始化

    public static void main(String[] args) {String str=null;Integer in=null;Double dou=null;String str1=(String)null;Integer in1=(Integer)null;Double dou1=(Double)null;int in2=null;int in3=(int)null;}

发现null可以初始化引用类型,也可以转换为任意的引用类型。但不能给基本类型赋值,或者转换为基本类型。

3.例三:null的相等性

    public static void main(String[] args) {System.out.println(null==null);System.out.println(null!=null);        System.out.println(Double.NaN==Double.NaN);System.out.println(Double.NaN!=Double.NaN);}

结果该是什么呢?

true

false

false

true

4.例四:null不是引用类型

    public static void main(String[] args) {Integer in=null;if(in instanceof Integer) {System.out.println("null is integer");}else {System.out.println("null is not integer");}}

你猜会打印出什么?

结果是:

null is not integer

5.例5:不可传递

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

报错:

Exception in thread "main" java.lang.NullPointerException

NullTest.main(NullTest.java:6)

6.例6:null的数组

    public static void main(String[] args) {String[] arr1={"abc","123",null,"sky"};boolean flag=false;for (String s1 : arr1) {if(s1.equals("sky")) {flag=true;break;}}System.out.println(flag);}

运行时报错

Exception in thread "main" java.lang.NullPointerException

at NullTest.main(NullTest.java:8)

修改成:

    public static void main(String[] args) {String[] arr1={"abc","123",null,"sky"};boolean flag=false;for (String s1 : arr1) {if(s1.equals("sky")) {flag=true;break;}}System.out.println(flag);}

就没有问题了。

追根到底

JSL3.10.7定义了null

The null type has one value, the null reference, represented by the null literal null, which is formed from ASCII characters.

JSL4.1做了补充:

1.There is also a special null type, the type of the expression null (§3.10.7, §15.8.1), which has no name.

Because the null type has no name, it is impossible to declare a variable of the null type or to cast to the null type.

2. The null reference is the only possible value of an expression of null type.

3.The null reference can always be assigned or cast to any reference type (§5.2, §5.3, §5.5).

4.In practice, the programmer can ignore the null type and just pretend that null is merely a special literal that can be of any reference type.

参考资料

【1】https://baike.baidu.com/item/%E8%89%B2%E5%8D%B3%E6%98%AF%E7%A9%BA/6210?fr=aladdin

【2】https://docs.oracle.com/javase/specs/jls/se12/html/jls-4.html#jls-4.1

【3】https://docs.oracle.com/javase/specs/jls/se12/html/jls-3.html#jls-3.10.7

【4】java解惑

色即是空,空即是色---java有关null的几件小事相关推荐

  1. 文件名不能为null_色即是空,空即是色---java有关null的几件小事

    故事背景 ---摩诃般若波罗蜜多心经: 观自在菩萨,行深般若波罗蜜多时,照见五蕴皆空,度一切苦厄.舍利子,色不异空,空不异色:色即是空,空即是色.受想行识,亦复如是.舍利子,是诸法空相,不生不灭,不垢 ...

  2. Java中有关Null的9件事

    对于Java程序员来说,null是令人头痛的东西.时常会受到空指针异常(NPE)的骚扰.连Java的发明者都承认这是他的一项巨大失误.Java为什么要保留null呢?null出现有一段时间了,并且我认 ...

  3. java中的null类型---有关null的9件事

    摘自 https://blog.csdn.net/qq_25077777/article/details/80174763 今天听到一个问题,java中的null类型,null竟然是一种类型 java ...

  4. java.util.set cannot be assigned from null_Java中有关Null的9件事

    对于Java程序员来说,null是令人头痛的东西.时常会受到空指针异常(NPE)的骚扰.连Java的发明者都承认这是他的一项巨大失误.Java为什么要保留null呢?null出现有一段时间了,并且我认 ...

  5. java set null值,从Java ResultSet检查null int值

    在Java中,我试图从ResultSet中测试是否为空值,在ResultSet中,该列将被强制转换为原始int类型. int iVal; ResultSet rs = magicallyAppeari ...

  6. java Swing 时间选择器控件

    效果图: 简要说明: 一个视图类: HongYeLingGuDate 一个抽象接口: SelectHYDateAbstract 需要导入的jar包: http://download.csdn.net/ ...

  7. 深入Java关键字null

    转载:http://lavasoft.blog.51cto.com/62575/79243/ 深入Java关键字null 一.null是代表不确定的对象 Java中,null是一个关键字,用来标识一个 ...

  8. java中null是常量吗_C_NULL Julia中的常量

    java中null是常量吗 Julia| C_NULL常数 (Julia | C_NULL Constant) C_NULL is a constant of Ptr{Nothing} type in ...

  9. java 关键字null

    java关键字 null 总结 作用: 1.默认给变量赋值. 引用类型的成员变量自动初始化时候赋值为null. 2.判断一个类型是否为空. 用"=="符号来判断. 3.释放内存(功 ...

最新文章

  1. Java删除文件夹和文件
  2. 网站down掉后,自动发信的shell
  3. 快速理解shopex模板机制经验教程(一)
  4. java固定资产管理系统_基于jsp的固定资产管理系统-JavaEE实现固定资产管理系统 - java项目源码...
  5. 5课件制作_【计算机论文】虚拟现实技术下多媒体课件开发的流程
  6. 重置系统_开课了,如何重置电脑系统?1分钟教会你!
  7. 完全免费软件开发论坛介绍
  8. pert计算公式期望值_PERT方法:用于计算各工序和工时的方法
  9. Substance Designer Dirt Ground
  10. IBM JDK官方下载地址
  11. POJ 3295 Tautology(构造)
  12. vuepress-theme-reco博客项目部署github
  13. TypeScript查缺补漏
  14. RC522读取NFC Forum Type2 Tag流程及代码解析——Mifare Ultralight卡片读取(采用PHY6212平台,可移植)
  15. 请问网页的在线聊天怎么实现
  16. 2017年年终总结 韩俊强的博客
  17. 人工智能的软件研发管理系统
  18. oracle -- sqlserver
  19. 线性插值、抛物插值、Lagrange插值 | Lagrange拉格朗日插值法(一)
  20. web自动化笔记九:验证码的处理方式

热门文章

  1. 车厘子为何这么贵?还这么多人喜欢吃?Python分析了1500家店铺数据,发现了这些秘密!
  2. TeeChart Pro ActiveX 2022.1
  3. 检测到不兼容的键盘驱动程序的解决
  4. ANSYS Maxwell导出图片的方法
  5. Dart plugin not installed; this adds Dart specific functionality. Flutter plugin not installed;
  6. aeasyexcel 操作 Excel
  7. vue 父链和子组件索引_Vue.js 学习笔记 第7章 组件详解
  8. Visual Studio 2019 安卓开发(一)
  9. 集线器、路由器、交换机对帧转发操作
  10. 工信部对多家涉及网络数据和用户个人信息安全突出情况的企业开展问询调查...