Null中有多少种语言不等于甚至没有Null?
答案 0 :(得分:15)
这种方式在SQL中(作为逻辑语言),因为null意味着未知/未定义。
但是,在编程语言(例如,C ++或C#)中,空指针/引用是具有特定含义的特定值 - 没有。
两个不相同的东西,但两个未知数不是。混淆来自两个概念都使用相同的名称(null)。
答案 1 :(得分: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
表示未初始化的变量。尽管还一个函数IsEmpty()
,但这个测试的确等于自己。我记得有点厌恶VB。
答案 2 :(得分:3)
Oracle就是这样。
SELECT * FROM dual WHERE NULL=null; --no rows returned
答案 3 :(得分:3)
MySQL有一个零安全等式运算符&lt; =&gt;,如果双方都相等或双方都为空,则返回true。请参阅MySQL Docs。
答案 4 :(得分:2)
你可以用这种方式制作红宝石:
class Null
def self.==(other);false;end
end
n=Null
print "Null equals nothing" if n!=Null
答案 5 :(得分:2)
在C#中,Nullable&lt; bool&gt;有关逻辑运算符的有趣属性,但是相等运算符与该语言中的其他类型相同(即((bool?)null ==(bool?)null)== true)。
为了保留短路逻辑运算符的short-circuited行为,并保持与非短路逻辑运算符的一致性,可空布尔值具有一些有趣的属性。例如:true || null == true。虚假&amp;&amp; null == false等。这与其他三值逻辑语言(如ANSI SQL)直接矛盾。
答案 6 :(得分:0)
在SQL中,您必须执行以下操作:
WHERE column is NULL
而不是
WHERE column = NULL