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

本文研究的主要是java中的null“类型”的相关实例,具体介绍如下。

先给出一道简单的null相关的题目,引发我们对null的探讨,后面会根据官方语言手册对null“类型”进行解读。

题目:下面程序能正确运行吗?

fadf20d4463ea17d1503f02cfedfb932.png

解析:

输出应该为 :haha

因为null 是可以强转为任何类类型的,所以前面((NULL)null)是合法的,但是null强转以后是无效对象,其返回值为null,(后面会作解释)

而haha方法是静态方法,静态方法使用静态绑定,不会抛出空指针异常。

如果把haha()函数变为非静态之后,将会抛出空指针异常。

再来一个例子:

22f237b981fb36568fd35b15825dc6df.png

这道题其实和上面是差不多的。

结果还是输出“haha”

81222ca090f4f51377e131550426cf1c.png

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“类型”的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/335014.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何彻底禁用Chrome浏览器的缓存功能

禁止Chrome浏览器的缓存功能有几种方式: 使用Shift F5强制刷新缓存。实际使用中我们发现,这种方法对于部分网页的更改并不能做到释放缓存的作用,尤其是无法释放DNS缓存。 使用隐身模式Shift Control N. 这种方法只能在打开的页面上消除之…

java int integer内存_java中一个integer对象的内存占用是多少?可以通过java方法输出吗?...

今天翻记录看到了自己15年3月份提的问题,现在已经18年6月份了;去年线上项目出现内存瓶颈,原因是缓存的玩家角色数据过多,在长时间不停服的情况下,导致数据越来越膨胀,之前没有清除无用缓存的机制&#xff0…

windows查看器无法打开图片_关于windows微软商城无法打开 错误代码0x80004003问题...

我本来是商城可以进 但是一打开里面的东西就无法打开 按下面的刷新就闪退 如下图操作桌面winr 运行 services.msc然后找到windows update打开就行 但是开启了系统会自动更新若是修改时显示拒绝访问桌面winr 输入regedit打开注册表 注册表找到HKEY_LOCAL_MACHINESYSTEMCurrentCo…

win10 java 反编译_win10下对.java源文件进行编译和反编译的步骤

1、先写好代码,如下找了个示例代码,文件名是Mutex.java:package com.huangshiyi.concurrent.cha04;import java.util.concurrent.TimeUnit;public class Mutex {private final static Object MUTEX new Object();public void accessResource…

电容屏物体识别_相比传统的触摸屏,电容式触摸屏的优势

点击蓝字,轻松关注今日话题 如今,我们的身边有着许多电子产品,主要是因为它便于我们的生活,所以我们的身边出现了许多触摸屏。对于电子产品,我们使用之前要了解清楚它的使用性能,掌握多点信息,这…

java底层机制_Java同步机制的底层实现

在多线程编程中我们会遇到很多需要使用线程同步机制去解决的并发问题,而这些同步机制就是多线程编程中影响正确性和运行效率的重中之重。这不禁让我感到好奇,这些同步机制是如何实现的呢?好奇心是进步的源泉,就让我们一起来揭开同…

payara 创建 集群_高可用性(HA),会话复制,多VM Payara群集

payara 创建 集群抽象 在研究如何创建高可用性(HA)时,我发现了会话复制,多机处理的Payara / GlassFish群集,无法在单个参考中找到所需的一切。 我认为这将是一个普遍的需求并且很容易找到。 不幸的是,我的假…

积分和人民币比率_通过比率路由到旧版和现代应用程序–通过Spring Cloud的Netflix Zuul...

积分和人民币比率从应用程序的旧版本迁移到应用程序的现代化版本时,一个非常常见的要求是能够将用户缓慢迁移到新应用程序。 在本文中,我将介绍通过Spring Cloud使用对Netflix Zuul的支持编写的这种路由层。 在继续之前,我必须承认&#xff0…

Java集合类原理详解

文章目录1 集合框架1.1 集合框架概述1.1.1 容器简介1.1.1 容器的分类1.2 Collection1.2.1 常用方法1.2.2 迭代器1.3 List1.3.1 概述1.3.2 常用方法1.3.3 实现原理1.4 Map1.4.1 概述1.4.2 常用方法1.4.3 Comparable 接口1.4.4 实现原理1.4.5 覆写 hashCode()1.5 Set1.5.1 概述1.…

sql安装联机丛书提示发生网络错误_速达软件:安装问题解答

问题Q&A在安装MSDE数据库时,出现安装程序倒退的情况解决方案:这是以前装过SQL Server数据库或MSDE数据库,没有卸载干净.解决办法重装操作系统。安装MSDE数据库时,系统出现“读取文件C:\program files\Microsoft sql sever\mssql\data\msd…

java分布式系统开发_从微服务到分布式系统-Java开发人员生存指南

java分布式系统开发感觉像是对微服务的炒作正在慢慢地落到实处,并且我们的行业开始意识到,根据微服务背后的体系结构范式无法通过仅在现有组件之上公开一些HTTP接口来轻松创建一个系统。 。 我们似乎确实同意必须进行服务优化的基础架构,文化…

链表数据结构原理图/内存结构图/内存图

单项链表内存结构图(也叫原理图) 单项链表内存结构图

反射与泛型 java_Java的反射 和 泛型的一个问题

aluckdog模板方法在编译过程中类型擦除:update(T,UpdateOperations)退化成update(Object,UpdateOperations);update(Query,UpdateOperations)退化成update(Query,UpdateOperations);morphia的update方法不光是一个模板方法,还是一…

迭代器原理图

原理图&#xff1a; Iterator<String> it Collection.iterator();it 是集合Collection的视图&#xff0c;迭代器其实就是视图&#xff08;类似数据库的 view&#xff09;&#xff0c;可以理解为一张单列多行的表&#xff0c;如下图所示&#xff1a; 有人理解成单行多…

neo4j python 算法_图论与图学习(二):图算法

选自towardsdatascience作者&#xff1a;Mal Fabien机器之心编译参与&#xff1a;熊猫图(graph)近来正逐渐变成机器学习的一大核心领域&#xff0c;比如你可以通过预测潜在的连接来理解社交网络的结构、检测欺诈、理解汽车租赁服务的消费者行为或进行实时推荐。近日&#xff0c…

cobol和java_现代化历险:策略+将COBOL转换为Java的示例

cobol和java在Keyhole Software&#xff0c;我们在很大程度上是一家现代化公司。 我们有一些顾问&#xff0c;专门研究将旧的代码迁移到新的&#xff0c;翻新的残旧代码库&#xff0c;并为大多数已经被供应商锁定的企业设计更光明的未来。 作为这些经验的一个有趣的副作用&…

递归算法 流程图_什么是算法?如何学习算法?算法入门的学习路径

什么是算法&#xff1f;有一个很著名的公式 “程序数据结构算法”。曾经跟朋友吃饭的时候我问他什么是算法&#xff0c;他说算法嘛&#xff0c;就是一套方法&#xff0c;需要的时候拿过来&#xff0c;套用就可以&#xff0c;我吐槽他&#xff0c;他说的是小学数学题的算法&…

envoy重试_具有Envoy代理的微服务模式,第二部分:超时和重试

envoy重试该博客是系列文章的一部分&#xff0c;该系列文章更深入地介绍了Envoy Proxy和Istio.io &#xff0c;以及它如何实现一种更优雅的连接和管理微服务的方式。 跟随我christianposta &#xff0c;紧跟这些博客文章的发布。 什么是Envoy代理 &#xff0c;它如何工作&…

网络研讨室_即将举行的网络研讨会:调试生产中Java的5种最佳实践

网络研讨室您的团队是否花费超过10&#xff05;的时间在生产中调试Java&#xff1f; 将新代码部署到生产中是一项艰巨的任务。 在您的本地环境中起作用的东西在生产中的作用并不相同&#xff0c;您可以通过用户来了解。 不理想吧&#xff1f; 生产中的调试是一个关键要素&…

chrome gwt1.7_快速提示:使用Chrome开发工具调试GWT应用程序

chrome gwt1.7调试是软件开发的重要方面。 拥有正确的工具可以节省大量时间和头痛。 在GWT Super Dev模式之前&#xff0c;经典的Dev模式允许使用JVM调试。 开发人员可以在其IDE中设置断点&#xff0c;并使用调试模式来跟踪错误和错误。 现在&#xff0c;在超级开发模式下&…