色即是空,空即是色---java有关null的几件小事
故事背景
---摩诃般若波罗蜜多心经:
观自在菩萨,行深般若波罗蜜多时,照见五蕴皆空,度一切苦厄。舍利子,色不异空,空不异色;色即是空,空即是色。受想行识,亦复如是。舍利子,是诸法空相,不生不灭,不垢不净,不增不减。是故空中无色,无受想行识,无眼耳鼻舌身意,无色声香味触法,无眼界,乃至无意识界,无无明,亦无无明尽,乃至无老死,亦无老死尽。无苦寂灭道,无智亦无得。以无所得故,菩提萨埵。依般若波罗蜜多故,心无挂碍,无挂碍故,无有恐怖。远离颠倒梦想,究竟涅磐,三世诸佛,依般若波罗蜜多故,得阿耨多罗三藐三菩提。故知般若波罗蜜多是大神咒,是大明咒, 是无上咒,是无等等咒,能除一切苦,真实不虚。故说般若波罗蜜多咒,即说咒曰:揭谛揭谛,波罗揭谛,波罗僧揭谛,菩提娑婆诃。
上面的经文总是让我容易冷静下来,可是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的几件小事的更多相关文章
- java中的null类型---有关null的9件事
摘自 https://blog.csdn.net/qq_25077777/article/details/80174763 今天听到一个问题,java中的null类型,null竟然是一种类型 java ...
- Java中有关Null的9件事
对于Java程序员来说,null是令人头痛的东西.时常会受到空指针异常 (NPE)的骚扰.连Java的发明者都承认这是他的一项巨大失误.Java为什么要保留null呢?null出现有一段时间了,并且我 ...
- Java中有关Null的9件事(转)
对于Java程序员来说,null是令人头痛的东西.时常会受到空指针异常(NPE)的骚扰.连Java的发明者都承认这是他的一项巨大失误.Java为什么要保留null呢?null出现有一段时间了,并且我认 ...
- Java字符串null相加
Java字符串null相加 最近和同事讨论了下面的一段代码: String a = null; a += a; System.out.println(a); 运行结果: nullnull 本着学习的态 ...
- 虚拟架构就绪 | 谈谈Windows Server 2012 R2迁移这件小事
我们所说的“新选择”包括操作系统升级——告别Windows Server 2003或2008,选择用什么样的姿势进行升级呢? 新年伊始,正是企业对自身IT基础设施进行评估的最佳时期.在多项评估项目里面 ...
- K8s 从懵圈到熟练 – 镜像拉取这件小事
作者 | 声东 阿里云售后技术专家 导读:相比 K8s 集群的其他功能,私有镜像的自动拉取,看起来可能是比较简单的.而镜像拉取失败,大多数情况下都和权限有关.所以,在处理相关问题的时候,我们往往会轻松 ...
- java里null强转为某个类会报错吗?
1.定义一个User类如下: /** * @author lizhibiao * @date 2018/11/27 17:21 */public class User{ private String ...
- java中null 关键字
Java中,null是一个关键字,用来标识一个不确定的对象.null常见意义:一.null是代表不确定的对象 Java中,null是一个关键字,用来标识一个不确定的对象.因此可以将null赋给引用类 ...
- 关于Java中null的十点详解
对于每一个Java程序员来说,null肯定是一个让人头痛的东西,连Java的发明者都承认这是一项巨大的设计失误,今天就来总结一下Java中关于null的知识. 1.null不属于任何类型,可以被转换成 ...
随机推荐
- CodeForces 939E Maximize
Maximize 题意:整个程序有2种操作,操作1将一个元素放入集合S中,且保证最新插入的元素不小于上一次的元素, 操作2 找到集合S中的某个子集合, 使得 集合中最大的元素减去平均数的值最大. 题解 ...
- HDU 6430 Problem E. TeaTree(虚树)
Problem E. TeaTree Problem Description Recently, TeaTree acquire new knoledge gcd (Greatest Common D ...
- 1014 装箱问题 CODE[VS]
1014 装箱问题 2001年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Descripti ...
- hdu 3966 Aragorn's Story(树链剖分+区间修改+单点查询)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3966 题意:给一棵树,并给定各个点权的值,然后有3种操作: I C1 C2 K: 把C1与C2的路径上 ...
- 工作中遇到的99%SQL优化,这里都能给你解决方案(三)
-- 示例表 CREATE TABLE `employees` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(24) NOT NULL ...
- POJ 2391 Ombrophobic Bovines(Floyd+二分+最大流)
题目链接 题意:农场有F(1 <= F <= 200)片草地用于放牛,这些草地有P(1 <= P <= 1500)连接,农场的草地上有一些避雨点,奶牛们可以在避雨点避雨,但是避 ...
- 利用HBuilder打包Vue开发的webapp为app
众所周知,前端开发完成的webapp只能运行在浏览器上,对运行环境有一定的限制,也就是除了浏览器其他的环境下不支持:那么现在如果有个需求是这样的呢?需要一套代码三端运行呢?三端运行(黑人脸??)是的, ...
- 动态设置 view 在布局中位置
一.概述 有时项目需要动态设置一个 底部列表,比如 popupwindow ,listview 底部显示 ,所以记录一下 此处, android.support.v7.widget.CardView ...
- Java之BigDecimal详解
一.BigDecimal概述 Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算.双精度浮点型变量double可以处理16位有效数,但在实 ...
- C#中使用FilleStream实现视频文件的复制
场景 C#中FileStream的对比以及使用方法: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100396022 关注公众号 ...