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

有帮助吗?

解决方案

SQL(作为一种逻辑语言)就是这样,因为 null 意味着未知/未定义。

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

两个无是等价的,但两个未知数则不然。造成混淆的原因是这两个概念使用了相同的名称(null)。

其他提示

在 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 对于未初始化的变量。尽管有 一个函数 IsEmpty().
  • ...如果我忘记了,请告诉我

我记得我对VB有点反感。

甲骨文就是这样的。

SELECT * FROM dual WHERE NULL=null;  --no rows returned

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

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

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

你可以让 ruby​​ 这样工作:

class Null
 def self.==(other);false;end
end
n=Null
print "Null equals nothing" if n!=Null

在 SQL 中你必须做类似的事情:

WHERE column is NULL

而不是

WHERE column = NULL
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top