gpt4 book ai didi

java - 为什么不能在 Java 中对空指针调用方法?

转载 作者:IT王子 更新时间:2023-10-29 01:11:15 25 4
gpt4 key购买 nike

在 Go 中,可以在空指针上调用方法,只要该指针永远不会被取消引用即可:

type empty struct{}
func (e *empty) Allocated() bool { return e != nil }

(可运行代码,点击here)

然而,在 Java 中,在空指针上调用方法,即使该方法从未取消引用任何成员变量,仍然会导致空指针异常:

class Test {
public boolean Allocated() { return this != null; }
}

有人知道为什么存在这种行为吗?它有什么优势吗?想法?

最佳答案

这是因为所有 Java 方法都是虚拟的。

当您编写 someInstance.Allocated() 时,运行时需要检查 someInstance 是否实际上是重写该方法的派生类型。

理论上,对于 finalprivate 方法可以放宽此限制。
我假设语言设计者选择不保持一致性。 (因此删除 final 不会是一个破坏性的变化)

关于java - 为什么不能在 Java 中对空指针调用方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17556837/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com