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,一经查实,立即删除!

相关文章

wcg总决赛_关于总决赛

wcg总决赛可以将变量声明为final。 最终变量只能分配一次。 如果分配了最终变量,则将导致编译时错误,除非在分配前立即将其明确取消分配。 分配任何最终变量后,将永远无法对其进行更改。 如果变量引用任何对象的任何实例,它将继续…

python dump函数用法_Python中json库的load和dump函数

相信很多朋友都对python里面的json库非常熟悉,json这个东西简明易懂,还能储存数据,实在是非常方便。我一开始使用json是从爬虫接触的,那个时候只知道json.loads和json.dumps,当时ide确实会自动填充load函数和dump函数&…

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

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

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

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

Linux命令行中的特殊符号_特殊字符

常用的特殊符号 符号说明#1.表示注释;2.命令提示符~表示用户主目录。切换到用户主目录下:cd ~,切换到用户主目录下的bin目录:cd ~/bin~表示当前目录。切换到当前目录下wwwroot目录:cd ~/wwwroot~-表示上次的工作目录。…

微信小程序css 华文琥珀_琥珀项目:较小的,面向生产力的Java语言功能

微信小程序css 华文琥珀Brian Goetz最近的消息欢迎来到琥珀! 介绍Project Amber ( OpenJDK的一部分, 最初于1月提出 )。 Goetz通过介绍“欢迎使用Amber项目,这是我们面向特定生产力的Java语言JEP的孵化场”的介绍打开了…

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…

Linux 删除指定目录下的文件/删除文件

文章目录删除当前目录下的所有类型的文件删除指定目录下的所有类型的文件用 find 命令在当前目录下查找普通文件并删除用 find 命令在指定目录下查找普通文件并删除用 find 命令的处理动作将当前目录及其子目录下的普通文件删除用 find 命令的处理动作将指定目录及其子目录下的…

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

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

gatling的环境配置_将Gatling集成到Gradle构建中–了解SourceSet和配置

gatling的环境配置我最近在一个项目中工作,我们不得不将出色的负载测试工具Gatling集成到基于Gradle的版本中。 有可用的gradle插件使此操作变得容易,其中有两个是this和this ,但是对于大多数需求而言,只需简单执行命令行工具本身…

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

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

Linux下常用文本处理命令

Linux下面有很多经典的非常有用的命令,其中处理文本的命令就有很多。这些小工具经过了几十年时间的洗礼,现在已经变成了经典,已经变成了Linux下面的标准,其实它们一直是遵循着Linux的标准。下面就让我们一起看看这些经典的Linux文…

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

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

python3连接oracle数据库真操蛋_为64位Windows7的Python3安装MySQLdb

Install 64-bit MySQLdb for Python 3 on Windows 7为64位Windows7的Pyhton3安装MySQLdb原文在此Jesus Rollerblading Christ. It all started as a simple idea: I would install Django and start working on this web app idea I had and use it as a chance to learn more …

每个程序员都应该知道的8个Linux命令

每个程序员,在职业生涯的某个时刻,总会发现自己需要知道一些Linux方面的知识。我并不是说你应该成为一个Linux专家,我的意思是,当面对linux命令行任务时,你应该能很熟练的完成。事实上,学会了下面8个命令&a…

python判断字符串在元祖_Python基础(2)——字典、元祖、字符串方法、非空即真、文件...

目录:一、字典二、元祖三、字符串方法、切片四、非空即真,非0即真五、文件正文一、字典字典d {username:xiaohei,id:1,grand:天马座,addr:北京,age:29}1、增加d {username:xiaohei,id:1,grand:天马座,addr:北京,age:29}#增:2个方法d[money] …

java hotspot 是什么_什么是HotSpot

Java是解释语言,但并不意味着它一定被解释执行。早期的虚拟机确实一条一条指令解释执行,但人们发现这样效率太低,不满足各种要求,因此出现了许多其它虚拟机,如JIT的虚拟机。HotSpot也是类似一种虚拟机,自从…

积分和人民币比率_通过比率路由到旧版和现代应用程序–通过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.…