美文网首页
关于null值比较

关于null值比较

作者: Little熊猫 | 来源:发表于2019-08-04 14:21 被阅读0次

    一 null值比较场景

    对于C/C++或者java中对于null值的比较,有的时候直接使用if(!p)有的时候使用if(p == null),可能有的编程规范中要求null值在前面if(null == p),那么我们日常使用中该如何使用呢? 有没有一个统一的标准。
    C语言中对null的比较,以linux kernel中的代码为例,使用的是if( p == NULL) 判断

    static inline int nf_bridge_get_physinif(const struct sk_buff *skb)
    {
        struct nf_bridge_info *nf_bridge;
    
        if (skb->nf_bridge == NULL)
            return 0;
    

    C++中对null指针的比较,以android中c++的工程代码为例,if(!p)和 if( p == nullptr) 都有使用,这里有一点要指出的是,c++使用的是nullptr而不是NULL

    Return<Result> Health::update() {
        if (!healthd_mode_ops || !healthd_mode_ops->battery_update) {
            LOG(WARNING) << "health@2.0: update: not initialized. "
                         << "update() should not be called in charger / recovery.";
            return Result::UNKNOWN;
        }
    
    Return<void> Health::debug(const hidl_handle& handle, const hidl_vec<hidl_string>&) {
        if (handle != nullptr && handle->numFds >= 1) {
            int fd = handle->data[0];
            battery_monitor_->dumpState(fd);
    

    Java语言中null的比较,也是if (obj != null)的方式:

        @Override
        public ArrayList<View> buildTouchDispatchChildList() {
            mTouchDispatchList.ensureCapacity(3);
            if (mCaption != null) {
                mTouchDispatchList.add(mCaption);
            }
            if (mContent != null) {
                mTouchDispatchList.add(mContent);
            }
            return mTouchDispatchList;
        }
    

    二 分析

    在C语言中关于NULL的定义

     define NULL ((void*)0)
    

    在C++语言中空指针使用的是nullptr而不是NULL,是因为NULL在C++中被定义成0,而nullptr才是给指针使用的。

    #define NULL 0
    

    由于JAVA中,除了立即数,其他都是对象,因此使用if(obj == null)进行比较。
    可能每个公司的编程规范要求null值在前,避免赋值操作,相关bug不好查找,对于java来说这方面不用考虑,因为

    if (o = null)
    

    上面这种压根就编译不过,因为if判断的是boolean类型,唯一需要考虑的是下面这种情况

    int m1(boolean x)
    {
        if (x = true)  // oops, assignment instead of equality
    

    像上面这种的话,直接判断x值即可

    三 总结

    1 对于java语言,除非编程规范限制,使用if (obj == null)判断即可,没有风险
    2 由于C语言没有boolean类型,因此对于空指针判断使用if(!p)比较好一点。如果使用NULL的话,编程规范有特殊要求的话,比如要在左边if(NULL == p)那就按照编程规范书写。

    相关文章

      网友评论

          本文标题:关于null值比较

          本文链接:https://www.haomeiwen.com/subject/kiqydctx.html