什么null
啊
是null
任何实例吗?
null
属于什么集合?
它在内存中如何表示?
null
是否是任何实例?
不,没有类型null
是instanceof
。
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类型和值的种类
还有一个特殊的null
类型,即expression
的类型null
,它没有名称。由于空类型没有名称,因此无法声明空类型的变量或将其强制转换为空类型。所述null
参考是一个表达式的唯一可能的值无效的类型。该null
参考总是可以被转换为任何引用类型。在实践中,程序员可以忽略null
类型,而只是假装这null
只是可以是任何引用类型的特殊文字。
什么是null?
正如上面的JLS引用所言,在实践中,你可以简单地假装它是“仅仅是可以用于任何引用类型的特殊文字”。
在Java中,null == null
(其他语言并不总是这样)。另请注意,根据合同,它还具有以下特殊属性(来自java.lang.Object
):
public boolean equals(Object obj)
对于任何非null
参考值x
,x.equals(null)
应该return false
。
它也是所有引用类型的默认值(对于具有它们的变量):
JLS 4.12.5变量的初始值
每个类变量,实例变量或数组组件在创建时均使用默认值初始化:
对于所有引用类型,默认值为null
。
使用方法各不相同。你可以使用它来启用所谓的字段的惰性初始化,在这种情况下,字段将具有其初始值,null
直到它被实际使用为止,在该字段中它被“实际”值(计算起来可能很昂贵)代替。
还有其他用途。让我们举一个真实的例子java.lang.System
:
public static Console console()
返回:系统控制台(如果有),否则null。
这是一种非常常见的使用模式:null用于表示对象不存在。
这是另一个用法示例,这次来自java.io.BufferedReader
:
public String readLine() throws IOException
返回:String
包含行内容的A ,不包含任何行终止字符,或者null
是否已到达流的末尾。
因此在这里,readLine()
将为instanceof String
每一行返回,直到最终返回a null
表示结束。这使你可以按以下方式处理每一行:
String line;
while ((line = reader.readLine()) != null) {
process(line);
}
可以设计API
,使终止条件不依赖于readLine()
返回null
,但是可以看到,这种设计具有使事情简洁的好处。请注意,空行没有问题,因为空行"" != null
。
让我们再举一个例子,这次是从java.util.Map<K,V>
:
V get(Object key)
返回指定键所映射到的值,或者null此映射不包含该键的映射。
如果此映射允许null
值,则返回值null
不一定表示该映射不包含键的映射;否则,返回值为0 。映射也可能将键显式映射到null
。该containsKey
操作可用于区分这两种情况。
在这里,我们开始了解使用null
如何使事情复杂化。第一条语句说,如果键未映射,null则返回。第二个声明说,即使按键映射,null
可也被退回。
相反,java.util.Hashtable
通过不允许null
键和值来简化事情;其V get(Object key)
,如果返回null
,则明确表示未映射密钥。
你可以通读其余的API,并找到在何处以及如何null使用它们。请记住,它们并不总是最佳实践示例。
一般来说,null用作特殊值表示:
它在内存中如何表示?
在Java中?不用担心 最好保持这种方式。
null是好事吗?
现在这是边界主观的。有人说这null
会导致许多程序员可以避免的错误。有人说,在NullPointerException
像Java这样的流行语言中,最好使用它,因为你会因程序员错误而快速失败。有些人避免null
使用Null
对象模式等。
它本身就是一个巨大的主题,因此最好将其讨论为对另一个问题的解答。
最后,我将引用null
他自己的发明者CAR Hoare的话(快速成名):
我称之为我的十亿美元错误。null
引用是1965年发明的。当时,我正在设计第一个用于面向对象语言(ALGOL W)的引用的综合类型系统。我的目标是确保所有对引用的使用都绝对安全,并由编译器自动执行检查。但是我无法抗拒引入null
引用的诱惑,仅仅是因为它是如此容易实现。这导致了无数的错误,漏洞和系统崩溃,在最近四十年中可能造成十亿美元的痛苦和破坏。
本文向大家介绍Java中的Null到底是什么,包括了Java中的Null到底是什么的使用技巧和注意事项,需要的朋友参考一下 前言 对于Java程序员来说,null是令人头痛的东西。时常会受到空指针异常(NPE)的骚扰。连Java的发明者都承认这是他的一项巨大失误。Java为什么要保留null呢?null出现有一段时间了,并且我认为Java发明者知道null与它解决的问题相比带来了更多的麻烦,但是n
问题内容: 在Java 8中,您可以返回而不是。Java8文档说Optional是“一个可能包含也可能不包含非null值的容器对象。如果存在一个值,则isPresent()将返回true,而get()将返回该值。” 实际上,这为什么有用?另外,在任何情况下,使用都是首选?性能如何? 问题答案: 实际上,这为什么有用? 例如,假设您有以下整数流,并且正在执行过滤: 您事先并不知道过滤操作会删除Str
问题内容: 我听说过新的Dart空安全语言功能(NNBD),目前称为“ “不可空”实验 ”。 默认情况下 应该引入 non- nullable 。 功能规范可在此处找到,语言GitHub问题可在此处找到。 它是如何工作的,我可以在哪里尝试? 问题答案: 当前可以在nullsafety.dartpad.dev中找到null安全/不可为空(默认情况下)的简短NNBD功能。 请记住,您可以在此处阅读完整
问题内容: 我必须编写一个例程,如果变量的类型为,则将变量的值加1,否则将变量的值分配为0,其中变量的初始值为或。 第一个实现是因为我认为没有数字会使算术表达式为假,但是由于计算为真,所以这是错误的。然后,我得知行为类似于0,并且以下表达式均被评估为true。 当然不是0。被评估为false。这使看似重言式的表达成为错误。 为什么实际上不是0,却像0? 问题答案: 您真正的问题似乎是: 为什么:
可能重复:if语句末尾有分号 我在编程时,在代码中发现了一个bug,这是因为“if”语句后面有一个分号,它的长方体“{xxx}”被执行时就好像它有自己的作用域一样--所以一切都会被编译。 这回避了一个问题,为什么是: Java中的一个可能的语句,它似乎是一行无用的代码,可能会产生很多bug等等。
本文向大家介绍NULL是什么意思?相关面试题,主要包含被问及NULL是什么意思?时的应答技巧和注意事项,需要的朋友参考一下 NULL这个值表示UNKNOWN(未知):它不表示“”(空字符串)。 对NULL这个值的任何比较都会生产一个NULL值。 您不能把任何值与一个 NULL值进行比较,并在逻辑上希望获得一个答案。 使用IS NULL来进行NULL判断