哪些编程语言会阻止空指针异常?

时间:2013-07-26 20:32:00

标签: null nullpointerexception

我知道你不能在Haskell中获得空指针异常,但我很好奇其他语言有这个功能。例如,一位同事询问是否有任何解释性语言不允许空值,我不知道答案。我所知道的唯一一种避免这种billion dollar mistake的语言是Haskell。

3 个答案:

答案 0 :(得分:3)

在Objective-C中,您可以将消息传递给实际为nil的对象,并且他们自己静默返回nil

但是,当您执行类似C的指针解除引用时(即使用*.运算符时),您仍然可能面临空指针异常的风险。

答案 1 :(得分:0)

Kotlin是一种静态类型的编程语言,可以在Java虚拟机上运行,​​也可以编译为JavaScript源代码或使用LLVM编译器基础结构。

Kotlin通过区分可空和非可空类型来避免空指针异常。所有可空变量必须用“?”声明postfix后的类型名称。对可空变量的操作需要开发人员特别小心:必须在使用该值之前执行null-check。

要在可变类型的变量上调用方法,必须使用“?”运算符,如果变量不为null(并使其返回类型为可空),则仅调用该方法,或者“!!”运算符,断言变量当前不为空。

请注意,如果您使用“!!”,您仍然可以在Kotlin上获得空指针异常null对象上的操作符或与Java交互时的操作符。

答案 2 :(得分:0)

C ++值和引用不能为null,只能是指针。如果不使用指针,并且在现代C ++中很少使用指针,则可以完全避免出现此问题。使用静态多态性优于动态方式。仅当可能的实现集在编译时未知时,才严格需要动态多态。在这种情况下,空对象模式或工厂可以避免出现空指针问题(使用const关键字可以防止不必要的重新分配)。