深入理解java中的null“类型”

 更新时间:2018年01月31日 15:29:13   作者:明明如月小角落  
这篇文章主要介绍了深入理解java中的null“类型”,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下

本文研究的主要是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一节中提到:

There are two kinds of types in the Java programming language: primitive types (§4.2) and reference types (§4.3). ”
Type:
PrimitiveType
ReferenceType
There is also aspecial 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.
The null reference is the only possible value of an expression of null type.
The null reference can always undergo a widening reference conversion to any reference type.
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.

我给翻译一下:

Java语言中有两种类型,一种是基本类型,还有一种是引用类型

还有一个特殊的null类型即表达式null的类型,它没有名字。

因为null类型没有名字,所以不可能声明为null类型的变量或者转换为null类型。

null引用是null类型表达式唯一可能的值。

null引用可以转换为任意引用类型。

实际上,程序员可以忽略null类型,可以认为null仅仅是一个可以成为任何引用类型的特殊符号。

看了这个一段,就比较豁然开朗了。

在5.2. Assignment Conversion一节中:

“A value of the null type (the null reference is the only such value) may be assigned to any reference type, resulting in a null reference of that type”

一个null类型(null(空)引用是这种类型的唯一的一个值)的值,可以赋值给任意类型,将返回一个该类型对象的空引用(其实还是null)。

在5.3. Method Invocation Conversion这一节有:

“A value of the null type (the null reference is the only such value) may be converted to any reference type.”

即“null可以被转换为任何引用类型。”

通过官方的语言手册,对null类型有了非常深刻的理解。

对我们编程以及以后求职笔试面试都有一定的帮助。

最后希望大家遇到一些奇怪的问题,除了百度外,尽量多去Stack Overflow网站上去搜索,也多去查官方手册。

总结

以上就是本文关于深入理解java中的null“类型”的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

相关文章

  • Spring Cloud Eureka 注册与发现操作步骤详解

    Spring Cloud Eureka 注册与发现操作步骤详解

    这篇文章主要介绍了Spring Cloud Eureka 注册与发现操作步骤详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • SpringBoot集成RocketMQ的使用示例

    SpringBoot集成RocketMQ的使用示例

    RocketMQ是阿里巴巴开源的一款消息中间件,性能优秀,功能齐全,被广泛应用在各种业务场景,本文就来介绍一下SpringBoot集成RocketMQ的使用示例,感兴趣的可以了解一下
    2023-11-11
  • Java动态替换properties文件中键值方式

    Java动态替换properties文件中键值方式

    这篇文章主要介绍了Java动态替换properties文件中键值方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • JavaSE文件操作工具类FileUtil详解

    JavaSE文件操作工具类FileUtil详解

    这篇文章主要为大家详细介绍了JavaSE系列之文件操作工具类FileUtil,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08
  • Java实现两人五子棋游戏(三) 画出棋子

    Java实现两人五子棋游戏(三) 画出棋子

    这篇文章主要为大家详细介绍了Java实现两人五子棋游戏,画出五子棋的棋子,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • struts2实现多文件上传

    struts2实现多文件上传

    这篇文章主要为大家详细介绍了struts2实现多文件上传,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • Mybatis如何实现关联属性懒加载

    Mybatis如何实现关联属性懒加载

    这篇文章主要介绍了Mybatis如何实现关联属性懒加载的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • Mybatis实现分表插件

    Mybatis实现分表插件

    随着系统的发展,数据量也会越来越大,分库分表可以有效的缓解数据库的压力,本文主要介绍了Mybatis实现分表插件,感兴趣的可以了解一下
    2021-05-05
  • Mybatis实战教程之入门到精通(经典)

    Mybatis实战教程之入门到精通(经典)

    MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架,通过本文给大家介绍Mybatis实战教程之入门到精通,对mybatis实战教程相关知识感兴趣的朋友一起学习吧
    2016-01-01
  • 如何通过java将doc文件转换为docx文件详解

    如何通过java将doc文件转换为docx文件详解

    在数字化时代文档处理成为了我们日常工作和学习中不可或缺的一部分,其中doc和docx作为两种常见的文档格式,各自具有不同的特点和优势,这篇文章主要给大家介绍了关于如何通过java将doc文件转换为docx文件的相关资料,需要的朋友可以参考下
    2024-07-07

最新评论