Suvitruf - Andrei Apanasik Asked:2020-08-21 01:48:09 +0800 CST2020-08-21 01:48:09 +0800 CST 2020-08-21 01:48:09 +0800 CST 什么是空? 772 null它是某事的一个例子吗? 它属于什么类型null? 是什么null? 它在记忆中是如何表现的? 对“Java 中什么是 null?”这个问题的松散翻译。来自@unj2。 java 1 个回答 Voted Best Answer Suvitruf - Andrei Apanasik 2020-08-21T01:48:15+08:002020-08-21T01:48:15+08:00 null它是某事的一个例子吗? 没有与 匹配instanceof的类型null。 15.20.2 类型比较运算符instanceof RelationalExpression: RelationalExpression instanceof ReferenceType 在运行时,运算符的结果instanceof是true如果RelationalExpression的值不是null,并且可以将引用强制转换为ReferenceType而不会出现异常ClassCastException。否则,结果将是false。 这意味着对于任何类型E,R对于任何E o地方o == null,o instanceof R总会有false. 它属于什么类型null? JLS 4.1 类型和值的种类。 还有一种特殊类型nullnull ,一种没有名称的表达式类型。而且因为 null类型没有名称,无法声明null变量或将变量强制转换为null。 null参考 - 唯一可能的值是null类型的表达式 。null始终可以转换为任何引用类型。实际上,您可以忽略null类型,并假装 null它只是一个可以是任何引用类型的特殊文字。 是什么null? 正如上面 JLS 的引用所述,“null只是一个可以是任何引用类型的特殊文字”。 在 Javanull == null中(并非所有语言都如此)。从描述java.lang.Object: public boolean equals(Object obj) 对于任何非null变量x,x.equals(null)必须返回false。 null也是所有引用类型的默认值。 JLS 4.12.5 变量的初始值: 静态类变量、实例变量和数组在创建时使用默认值进行初始化: * 对于所有引用类型(第 4.3 节),默认值为null. 您可以将此属性用于延迟初始化,在实际使用之前,该字段将具有初始值null,其中它将被替换为“真实”值(计算起来可能很昂贵)。 还有其他用途。如果你看java.lang.System: public static Console console() 返回: 系统控制台(如果有),否则为 null。 这是一种很常见的做法:null用来指代一个不存在的对象。 另一个例子是java.io.BufferedReader: public String readLine() throws IOException 返回: 包含行内容的字符串,不包括任何行终止字符,如果已到达流的末尾,则返回 null。 readLine()将返回instanceof String每一行,直到它得到null一个,表示结束。这使得每一行都可以这样处理: String line; while ((line = reader.readLine()) != null) { process(line); } 注意:空字符串不是问题,因为 "" != null. 让我们考虑一下java.util.Map<K,V>: V get(Object key) 返回指定键映射到的值,或者null如果此映射不包含该键的映射。 如果此映射允许null值,则返回值null不一定表示映射不包含键的映射;地图也有可能将键显式映射到null. 该containsKey操作可用于区分这两种情况。 在这里,我们看到使用null会使事情复杂化。它在这里说,如果没有这样的密钥,null. 第二个语句说即使有一个元素具有这样的键,它仍然可以返回null。 例如,java.util.Hashtable通过禁用null键和值使事情变得更容易;所以,如果它V get(Object key)返回,null它清楚地表明这样一个键下没有任何东西。 不会抛出自动null拆箱操作java.lang.NullPointerException: Integer i = null; // при анбоксинге null в integer будет выброшен NullPointerException int a = i; 总而言之,它null被用作特殊含义来表示: 未初始化状态。 终端条件 不存在的物体。 未知值。 null它在记忆中是如何表现的? 从JVM 规范: Java 虚拟机规范不强制要求具体的值编码null。 小加法 CAR Hoare的一句有趣的话: 我称之为我的十亿美元错误。这是 null1965 年引用的发明。当时,我正在为面向对象语言 ( ALGOL W ) 中的引用设计第一个综合类型系统。我的目标是确保所有引用的使用都应该是绝对安全的,并由编译器自动执行检查。但我无法抗拒提供null参考的诱惑,仅仅是因为它很容易实现。这导致了无数的错误、漏洞和系统崩溃,在过去的四十年中可能造成了十亿美元的痛苦和损失。 您还可以观看有关十亿美元错误的演示。 在形成答案时,要回答“Java 中什么是 null?”这个问题。来自贡献者@polygenelubricants。
null
它是某事的一个例子吗?没有与 匹配
instanceof
的类型null
。15.20.2 类型比较运算符
instanceof
这意味着对于任何类型
E
,R
对于任何E o
地方o == null
,o instanceof R
总会有false
.它属于什么类型
null
?JLS 4.1 类型和值的种类。
是什么
null
?正如上面 JLS 的引用所述,“
null
只是一个可以是任何引用类型的特殊文字”。在 Java
null == null
中(并非所有语言都如此)。从描述java.lang.Object
:null
也是所有引用类型的默认值。JLS 4.12.5 变量的初始值:
您可以将此属性用于延迟初始化,在实际使用之前,该字段将具有初始值
null
,其中它将被替换为“真实”值(计算起来可能很昂贵)。还有其他用途。如果你看
java.lang.System
:这是一种很常见的做法:
null
用来指代一个不存在的对象。另一个例子是
java.io.BufferedReader
:readLine()
将返回instanceof String
每一行,直到它得到null
一个,表示结束。这使得每一行都可以这样处理:注意:空字符串不是问题,因为
"" != null
.让我们考虑一下
java.util.Map<K,V>
:在这里,我们看到使用
null
会使事情复杂化。它在这里说,如果没有这样的密钥,null
. 第二个语句说即使有一个元素具有这样的键,它仍然可以返回null
。例如,
java.util.Hashtable
通过禁用null
键和值使事情变得更容易;所以,如果它V get(Object key)
返回,null
它清楚地表明这样一个键下没有任何东西。不会抛出自动
null
拆箱操作java.lang.NullPointerException
:总而言之,它
null
被用作特殊含义来表示:null
它在记忆中是如何表现的?从JVM 规范:
小加法
CAR Hoare的一句有趣的话:
您还可以观看有关十亿美元错误的演示。
在形成答案时,要回答“Java 中什么是 null?”这个问题。来自贡献者@polygenelubricants。