java中的null_Java中的NULL是什么?

NULL是任何东西的实例吗?

不,没有哪种类型null是instanceof.RelationalExpression:

RelationalExpression instanceof ReferenceType

在运行时,instanceof运算符是true如果关系表达不是null引用可以转换为参考类型不提ClassCastException..否则结果是false.

这意味着对于任何类型的E和R,对任何E o,在哪里o == null, o instanceof R总是false.‘NULL’属于什么集合?还有一个特别的零类型,表达式的类型。null它没有名字。因为零类型没有名称,因此不可能声明零类型或要转换为零类型。这个null的表达式的唯一可能值。零类型。这个null引用始终可以转换为任何引用类型。实际上,程序员可以忽略零输入并假装null只是一个特殊的文字,可以是任何引用类型。什么是空?

正如上面JLS引用的那样,在实践中,您可以简单地假装它“只是一个特殊的文字,可以是任何引用类型”。

在爪哇,null == null(在其他语言中并不总是这样)。还请注意,根据合同,它还具有以下特殊属性(来自java.lang.Object):public boolean equals(Object obj)

对于任何非-null参考值x, x.equals(null)应return false.

它也是默认值(对于拥有它们的变量)所有引用类型:每个类变量、实例变量或数组组件都使用

默认值当它被创建时:对于所有引用类型,默认值为

null.

它的使用方式各不相同。您可以使用它启用所谓的延迟初始化字段,其中字段的初始值为null直到它被实际使用,在那里它被“实”值所取代(计算起来可能很昂贵)。public static Console console()

回报如果有系统控制台,则为null.

这是一个非常常见的使用模式:null用于表示对象的不存在。public String readLine() throws IOException

回报*aString包含行的内容,不包括任何行终止字符,或null如果已经到达流的末尾。

所以在这里,readLine()会回来instanceof String对于每一行,直到最后返回null意味着结束。这允许您按以下方式处理每一行:String line;while ((line = reader.readLine()) != null) {

process(line);}

可以设计API,使终止条件不依赖于readLine()回归null,但可以看出,这种设计的好处是使事情简明扼要。请注意,空行没有问题,因为空行"" != null.V get(Object key)

返回指定键映射到的值,或null如果此映射没有包含键的映射。

如果这张地图允许null值,则返回值为null不一定表示映射不包含键的映射;也可能是映射显式地将键映射到null..这个containsKey手术可以用来区分这两种情况。

在这里,我们开始看到如何使用null会使事情复杂化。第一条语句说,如果密钥没有映射,null会被归还。第二条声明说,即使映射了密钥,null能,会,可以也被归还。

相反,java.util.Hashtable通过不允许使事情变得简单null键和值V get(Object key),如果返回null,这无疑意味着密钥没有映射。

您可以阅读其余的api,并找到何处和如何。null被利用了。一定要记住,他们并不总是最佳做法例子。

一般来说,null被用作一个特殊的值来表示:未初始化状态

终止条件

不存在对象

未知值它在记忆中是如何表示的?

在爪哇?与你无关。最好保持这种状态。

是null一件好事?

这现在是主观的。有人说null导致许多本来可以避免的程序员错误。有人说用一种能捕捉到的语言NullPointerException和Java一样,使用它也很好,因为在程序员的错误上你会很快失败。有些人避免null用空对象模式等

这本身就是一个巨大的话题,所以最好把它作为另一个问题的答案来讨论。

我将以引用发明者的话来结束这件事。null他自己,C.A.R Hoare(指迅速成名的):我称它为我的数十亿美元的错误。这是人类发明的null1965年参考文献。当时,我正在用面向对象的语言(AlgolW)设计第一个用于引用的综合类型系统。我的目标是确保所有引用的使用都是绝对安全的,由编译器自动执行检查。但我无法抵挡诱惑null引用,仅仅是因为它很容易实现。这导致了无数的错误、漏洞和系统崩溃,在过去的四十年中,它们可能造成了数十亿美元的痛苦和破坏。

这个本演讲录像更深一点,这是一个推荐的手表。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值