7

在多少种语言中,Null 不等于任何不等于 Null 的东西?

4

7 回答 7

15

在 SQL(作为一种逻辑语言)中就是这种方式,因为 null 表示未知/未定义。

但是,在编程语言(例如 C++ 或 C#)中,空指针/引用是具有特定含义的特定值 - 没有。

两个虚无是等价的,但两个未知数不是。混淆来自于两个概念使用相同的名称(null)这一事实。

于 2008-09-16T18:15:01.713 回答
4

在 VB6 中,表达式Null = Null将产生Null而不是True您所期望的。如果您尝试将其分配给布尔值,这将导致运行时错误,但是如果您将其用作 " If ... Then" 的条件,它将表现得像False. 而且Null <> Null还会产生Null所以:

在 VB6 中,您可以说它Null既不等于自身(或其他任何东西),也不等于!

您应该使用该IsNull()功能对其进行测试。

VB6 还有其他特殊值:

  • Nothing用于对象引用。Nothing = Nothing是编译错误。(您应该使用“ is”进行比较)
  • Missing对于尚未给出的可选参数。它没有文字表示,所以你甚至不能写Missing = Missing. (测试是IsMissing(foo)
  • Empty对于未初始化的变量。尽管还有一个 function ,但这个确实 test equal to its own IsEmpty()
  • ...如果我忘记了,请告诉我

我记得我对VB有点反感。

于 2008-09-26T05:54:17.703 回答
3

甲骨文就是这样。

SELECT * FROM dual WHERE NULL=null;  --no rows returned
于 2008-09-16T18:12:15.950 回答
3

MySQL 有一个 null 安全的相等运算符 <=>,如果两边相等或两边都为 null,则返回 true。请参阅MySQL 文档

于 2008-09-16T18:20:30.797 回答
2

你可以让红宝石​​这样工作:

class Null
 def self.==(other);false;end
end
n=Null
print "Null equals nothing" if n!=Null
于 2008-09-16T18:29:41.243 回答
2

在 C# 中,Nullable<bool> 具有关于逻辑运算符的有趣属性,但相等运算符与该语言中的其他类型相同(即 ((bool?)null == (bool?)null) == true) .

为了保持短路逻辑运算符的短路行为,并保持与非短路逻辑运算符的一致性,可为空的布尔值具有一些有趣的属性。例如:真 || 空==真。false && null == false 等。这与其他三值逻辑语言如ANSI SQL直接矛盾。

于 2008-09-26T06:36:00.787 回答
0

在 SQL 中,您必须执行以下操作:

WHERE column is NULL

而不是

WHERE column = NULL
于 2009-11-26T19:02:31.313 回答