GVKun编程网logo

为什么null不等于null false(null为什么是0)

8

本篇文章给大家谈谈为什么null不等于nullfalse,以及null为什么是0的知识点,同时本文还将给你拓展c–非指针等于NULL的是什么?、c#–DBNull如何不等于DBNull、c#–为什么n

本篇文章给大家谈谈为什么null不等于null false,以及null为什么是0的知识点,同时本文还将给你拓展c – 非指针等于NULL的是什么?、c# – DBNull如何不等于DBNull、c# – 为什么null条件运算符对==和.Equals()的行为不同?、failed to parse: {"row":[8,6,12,7,13,8,14],"meta":[null,null,null,null,null,null,null]}]} 11:46:29.8等相关知识,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

为什么null不等于null false(null为什么是0)

为什么null不等于null false(null为什么是0)

我正在阅读本文: 在SQL中获取null == null

共识是,当尝试测试两个(可空)sql列之间的相等性时,正确的方法是:

where ((A=B) OR (A IS NULL AND B IS NULL))

当A和B为NULL时,(A = B)仍返回FALSE,因为NULL不等于NULL。这就是为什么需要额外检查的原因。

检验不平等情况如何?经过以上讨论,我认为要测试不平等,我需要做一些类似的事情:

WHERE ((A <> B) OR (A IS NOT NULL AND B IS NULL) OR (A IS NULL AND B IS NOT NULL))

但是,我注意到这不是必需的(至少在informix 11.5上没有),我可以这样做:

where (A<>B)

如果A和B为NULL,则返回FALSE。如果NULL不等于NULL,那么这不应该返回TRUE吗?

编辑
这些都是很好的答案,但我认为我的问题有点含糊。请允许我改写:

假设A或B可以为NULL,是否足以用来检查它们的不等式

where (A<>B)

还是我需要像这样显式检查它:

WHERE ((A <> B) OR (A IS NOT NULL AND B IS NULL) OR (A IS NULL AND B IS NOT NULL))

答案1

小编典典

涉及NULL的关系表达式实际上再次产生NULL

编辑

在这里,<>代表任意的二进制运算符,NULL是SQL占位符,value是任何值(NULL是不是一个值):

NULL <> value -> NULL
NULL <> NULL -> NULL
逻辑是:NULL表示“无值”或“未知值”,因此与任何实际值的任何比较都是没有意义的。

X = 42假设您不知道拥有什么值(如果有),它是true,false还是未知X?SQL表示未知。X = Y假设两者都是未知的,则为真,假或未知?SQL说结果未知。它对任何二元关系操作都是如此,这只是逻辑上的(即使模型中的NULL不在首位)。

SQL还提供了两个一元后缀运算符IS NULL和IS NOT NULL,它们根据其操作数返回TRUE或FALSE。

NULL IS NULL -> TRUE
NULL IS NOT NULL -> FALSE

c – 非指针等于NULL的是什么?

c – 非指针等于NULL的是什么?

对我不正当的术语道歉.

如果条目不存在,我有一段代码返回NULL指针:

ObjectType * MyClass::FindobjectType( const char * objectTypeName )
{
    if ( objectTypeMap.find( objectTypeName ) == objectTypeMap.end() )
    {
        Msg( "\n[C++ ERROR] No object type: %s",objectTypeName );
        return NULL;
    }
    else
        return &objectTypeMap[ objectTypeName ];
}

我想做同样的事情,但这次返回一个对象,而不只是一个指针.以下代码不会给我任何编译器错误(这让我感到惊讶):

ObjectType MyClass::FindobjectType( const char * objectTypeName )
{
    if ( objectTypeMap.find( objectTypeName ) == objectTypeMap.end() )
    {
        Msg( "\n[C++ ERROR] No object type: %s",objectTypeName );
    }
    else
        return objectTypeMap[ objectTypeName ];
}

用指针我可以检查是否没有找到这样的条目:

if ( FindobjectType( objectType ) == NULL )
    //Do something

如何对待返回的对象执行等效检查?

解决方法

对象没有语言层面的等价物.

一个选项是创建一个“哨兵”对象,保证与任何“真实”对象的不平等进行比较,并返回:

class ObjectType {
public:
    static const ObjectType null;

    bool operator==(const ObjectType &rhs) const { /* need an appropriate comparison test */ }

    ...
};

ObjectType ObjectType::null(/* something unique */);


...

ObjectType foo(const char *objectTypeName) {
    if (cond) {
        return objectTypeMap[objectTypeName];
    } else {
        return ObjectType::null;
    }
}


...

if (foo(objectType) == ObjectType::null) {
    std::cout << "Returned the null object\n";
}

c# – DBNull如何不等于DBNull

c# – DBNull如何不等于DBNull

我有以下代码行
if (dbnull.Value.Equals(o) || o != null)

其中o是row中的对象o.ItemArray我一直收到错误 – >

Xml类型“xdt:untypedAtomic列表”不支持从Clr类型“dbnull”到Clr类型“String”的转换.

我不明白的是,当我单步执行我的代码时,如果应该抓住这个并执行我的替代操作,但它不是?

有人可以为我解释一下.

谢谢!

解决方法

尝试使用

Convert.IsDBNull方法.

c# – 为什么null条件运算符对==和.Equals()的行为不同?

c# – 为什么null条件运算符对==和.Equals()的行为不同?

我有以下代码,工作正常:

var firstChild = token.First as JProperty;
bool isHref = token.Children().Count() == 1
           && firstChild?.Name == "href";

我想使字符串比较不区分大小写,所以我将其更改为:

var firstChild = token.First as JProperty;

bool isHref = token.Children().Count() == 1
           && firstChild?.Name.Equals("href",StringComparison.OrdinalIgnoreCase);

现在编译器给了我一个错误:

Operator && cannot be applied to operands of type ‘bool’ and ‘bool?’

我可以通过合并到false来修复错误

bool isHref = token.Children().Count() == 1
         && (firstChild?.Name.Equals("href",StringComparison.OrdinalIgnoreCase) ?? false);

但我很好奇为什么编译器不喜欢第一个空条件语法.

解决方法

让我们简化一下要领.

string x = null,y = null;

// this is null.  b1 is bool?
var b1 = x?.Equals(y); 

// b2 is bool
// this is true,since the operator doesn't require non-null operands
var b2 = x == y;

基本上.Equals()需要一个非null对象来操作.这与==不同,后者是静态绑定的,不是动态调度的.

failed to parse: {

failed to parse: {"row":[8,6,12,7,13,8,14],"meta":[null,null,null,null,null,null,null]}]} 11:46:29.8

IDEA整合springboot与neo4j时出现这个问题

关于为什么null不等于null falsenull为什么是0的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于c – 非指针等于NULL的是什么?、c# – DBNull如何不等于DBNull、c# – 为什么null条件运算符对==和.Equals()的行为不同?、failed to parse: {"row":[8,6,12,7,13,8,14],"meta":[null,null,null,null,null,null,null]}]} 11:46:29.8的相关信息,请在本站寻找。

本文标签: