在多少种语言中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
为了保持短路逻辑运算符的短路行为,并保持与非短路逻辑运算符的一致性,可空布尔值具有一些有趣的属性。 例如: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