在多少种语言中," Null"不等于" Null"就等于什么?

时间:2020-03-05 18:56:44  来源:igfitidea点击:

Null在多少种语言中不等于Null?

解决方案

回答

甲骨文就是这样。

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

回答

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

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

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

回答

MySQL有一个空安全的相等运算符<=>,如果双方相等或者双方为null,则返回true。参见MySQL文档。

回答

我们可以通过以下方式使红宝石工作:

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

回答

在VB6中,表达式" Null = Null"将产生" Null",而不是我们所期望的" True"。
如果我们尝试将其分配给布尔值,则会导致运行时错误,但是如果我们使用它,则会导致运行时错误
作为"如果...则"的条件,它将像"假"一样起作用。而且Null <> Null也将 产生Null`,所以:

在VB6中,我们可以说" Null"既不等于自身(或者其他任何东西)也不不相等!

我们应该使用IsNull()函数对其进行测试。

VB6还具有其他特殊值:

  • 对象引用什么都没有。 Nothing = Nothing是编译错误。 (我们应该使用"is"进行比较)
  • 缺少可选参数的Missing。它没有文字表示,因此我们甚至无法编写" Missing = Missing"。 (测试是IsMissing(foo))
  • 空的代表未初始化的变量。尽管也有一个函数" IsEmpty()",但它的确与自己相等。
  • ...让我知道我是否忘记了一个

我记得对VB有点厌恶。

回答

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

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

回答

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

WHERE column is NULL

而不是

WHERE column = NULL