本文研究的主要是java中的null“类型”的相关实例,具体介绍如下。
先给出一道简单的null相关的题目,引发我们对null的探讨,后面会根据官方语言手册对null“类型”进行解读。
题目:下面程序能正确运行吗?
解析:
输出应该为 :haha
因为null 是可以强转为任何类类型的,所以前面((NULL)null)是合法的,但是null强转以后是无效对象,其返回值为null,(后面会作解释)
而haha方法是静态方法,静态方法使用静态绑定,不会抛出空指针异常。
如果把haha()函数变为非静态之后,将会抛出空指针异常。
再来一个例子:
这道题其实和上面是差不多的。
结果还是输出“haha”
Java Language Specification中我们可以看到
在4.1. The Kinds of Types and Values一节中提到:
我给翻译一下:
Java语言中有两种类型,一种是基本类型,还有一种是引用类型。
还有一个特殊的null类型即表达式null的类型,它没有名字。
因为null类型没有名字,所以不可能声明为null类型的变量或者转换为null类型。
null引用是null类型表达式唯一可能的值。
null引用可以转换为任意引用类型。
实际上,程序员可以忽略null类型,可以认为null仅仅是一个可以成为任何引用类型的特殊符号。
看了这个一段,就比较豁然开朗了。
在5.2. Assignment Conversion一节中:
一个null类型(null(空)引用是这种类型的唯一的一个值)的值,可以赋值给任意类型,将返回一个该类型对象的空引用(其实还是null)。
在5.3. Method Invocation Conversion这一节有:
即“null可以被转换为任何引用类型。”
通过官方的语言手册,对null类型有了非常深刻的理解。
对我们编程以及以后求职笔试面试都有一定的帮助。
最后希望大家遇到一些奇怪的问题,除了百度外,尽量多去Stack Overflow网站上去搜索,也多去查官方手册。
总结
以上就是本文关于深入理解java中的null“类型”的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!