在多少种语言中Null不等于甚至没有Null的东西?

在多少种语言中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。

Oracle就是这样。

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

MySQL有一个空安全等式运算符<=>,如果双方都相等或双方都为空,则返回true。 请参阅MySQL文档 。

在C#中,Nullable 对逻辑运算符有一些有趣的属性,但是相等运算符与该语言中的其他类型相同(即((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 
Interesting Posts