比较对象时,null == null是否为true?

Geo*_*uer 6 language-agnostic oop

我很好奇每个人的想法.在SQL中(至少在oracle中),NULL在概念上转换为"我不知道值",因此NULL = NULL为false.(也许它实际上导致NULL然后被转换为false或类似的东西...)

这对我来说很有意义,但在大多数OO语言中,null表示"无引用",因此null == null应该是真的.这是在C#中执行操作的常用方法,例如在重写Equals时.

另一方面,null仍然经常用于表示面向对象语言中的"我不知道",并且将null == null实现为false可能会导致代码对某些域稍微有意义.

告诉我你的想法.

Ste*_*all 10

对于通用编程,null == null应该返回true.

我无法计算我遇到的次数

if( obj != null )
{
   //call methods on obj
}
Run Code Online (Sandbox Code Playgroud)

模式,它似乎经常是不可避免的.如果将null == null计算为false,则此模式将会崩溃,并且没有异常处理此情况的好方法.


Ale*_*lli 8

我认为Java中的null,就像C++中的NULL或Python中的None一样,意味着"这里没有任何东西" - 而不是 "我不知道",这是SQL特有的概念,在OOP语言中并不常见.


cop*_*kin 3

我已经对 IEEE NaN 不等于它自己感到恼火了。我倾向于将 == 视为一种等价关系,其属性之一是自反性。如果您有“未知”值相等的特殊语义,我认为您应该使用更具体的东西,而不是重载语义很好理解的运算符。例如,仅仅因为您不知道两个值是否相等,并不意味着它们肯定不相等,这是我从 == 的 False 返回值中猜测的。看来你真的想要某种三元逻辑。根据您的语言,您可能会或可能不容易想出一个简洁的 ==-alike 可以返回 True 或 False 或 NoClue,但我绝对认为它应该是分开的。

只是我对此事的看法:)

  • 我认为你的意思是“True”、“False”或“FileNotFound”;) (3认同)