nil 和NULL 的区别

博客引用处(以下内容在原有博客基础上进行补充或更改,谢谢这些大牛的博客指导):
nil和NULL 的区别

在java项目中会遇到nil和null,下面详细说明下他们的区别:

  1. NULL

    只能作为指针变量的值. 如果1个指针变量的值是NULL值代表. 代表这个指针不指向内存中的任何1块空间

    NULL其实等价于0 NULL其实是1个宏. 就是0

  2. nil

    只能作为指针变量的值. 代表这个指针变量不指向内存中的任何空间.

    nil其实也等价于0 也是1个宏. 就是0.

    所以, NULL和nil其实是一样的 。

  3. 使用建议.

    虽然使用NULL的地方可以是nil 使用 nil的地方可以使用NULL 但是不建议大家去随便使用.

    C指针用NULL

      int *p1 = NULL; p1指针不指向内存中的任何1块空间.
    

    OC的类指针用nil

      Person *p1 = nil; p1指针不指向任何对象.
    
  4. 如果1个类指针的值为nil 代表这个指针不指向任何对象.

    Person *p1 = nil;

    那么这个时候 如果通过p1指针去访问p1指针指向的对象的属性 这个时候会运行报错.

    那么这个时候,如果通过p1指针去调用对象的方法 运行不会报错 但是方法不会执行 没有任何反应

null == 0,null > 0,null >= 0 运行结果分析
上面说啦,null其实等价与0,但是这个等价是在Number()转换后的值。

ull == 0 结果分析
这个运行结果是: false
可以看到,== 运算规则是先判断运算元类型,而不是先使用 Number() 去强制转换的,并且也说明了只有 null 和 undefined 是互等的。除了严格按照规则去理解,我觉得也可以从另一个角度理解这个现象,假设一个变量为:
在这里插入图片描述
可以看到 null 和 undefined 属于无值类型,它们同 有值类型肯定是不相等了。

null > 0 结果分析
这个运行结果是:false

在比较运算符中,如果一端为数字,会将另一端转换为数字去比较。像上面提到的那样,使用 Number(null) 结果是 0,所以 null > 0 返回结果是 false。

null >= 0 结果分析
这个运行结果是:true
如果你得到的答案是 false,我猜测有可能是你在看完上面我们对 null > 0 和 null == 0的分析,然后又把 null >= 0 给等价于 null > 0 || null == 0,所以才有了 null >= 0 结果为 false 的结论。但是,刚才说的『等价』是不对的,让我们看下规则是怎么描述的:
a >= b 其实是等价于 !(a < b) 而不是 a > b || a == b。其实我们通读下关于比较运算符的运算规则,就会发现所有的比较运算符都是转换成 < 去做比较的。

猜你喜欢

转载自blog.csdn.net/fragrant_no1/article/details/87715999