精华内容
下载资源
问答
  • 本文主要介绍了 C语言中的"NULL"是什么?有什么用?
  • NULL是什么意思

    万次阅读 2019-02-16 12:40:31
    NULL是什么意思 NULL这个值表示UNKNOWN(未知):它不表示“”(空字符串)。 对NULL这个值的任何比较都会生产一个NULL值。 您不能把任何值与一个 NULL值进行比较,并在逻辑上希望获得一个答案。 使用IS NULL来进行...

    NULL是什么意思

    NULL这个值表示UNKNOWN(未知):它不表示“”(空字符串)。

    对NULL这个值的任何比较都会生产一个NULL值。

    您不能把任何值与一个 NULL值进行比较,并在逻辑上希望获得一个答案。

    使用IS NULL来进行NULL判断

    展开全文
  • 意思是一样,都是用于判断是否为null(空),但是假如你du用不同的输入在计算机zhi上,null== a 识别度更dao高,编写代码中null==的表示更加规范,由于a=null是一个恒为真的的等式,所以为防止输入错误,通用为null=...

    意思是一样的,都是用于判断是否为null

    但是比较而bai言(设a为比较对象),null== a 更为安全,当你编写代码是很有可能把==写为=,则 a==null变为了a=null,显然这是一个恒为真的,所以会影响你的程序,而且很难查出错误的原因。

     

    拓展资料
    1.NULL本意是“空的”;元素只有“零”的意思。计算机中通常表示空值,无结果,或是空集合。在ASCII码的第一个字符是NULL,它的数值是0,占用1字节;C语言把它作为字符串的最后一个字符,以表示字符串到此结束"\0"。

    2.NULL指针是一个无类型指针,并且值为0。一个指针,拥有2个属性--地址值和指针类型。两者的作用是:地址值标识变量的首地址(32位系统下指针的地址值占4字节)。

    3.指针类型告诉编译器,应该怎样进行接下来的数据访问(int型数组和float型数组是不同的;数组访问与结构体访问也是不同的;等等)。

    4.NULL的出现是一种约定俗成,事实上它不是C语言中的关键字;把一个指针赋值为NULL,通常的说法是“将指针悬空”。

    5.指针就无法再进行任何数据访问了。编程工作中有一类比较容易犯的错误--指针地址未进行正确的更新赋值就加以使用,这往往会造成很严重的后果(对内存区进行错误的涂抹)。所以一个良好的习惯是,当一个指针的工作稍事休息,先把它赋值为NULL,待到再度使用时,重新对其赋值以及进行指针类型转化。

    展开全文
  • 系统错误null是什么意思 Java中NULL用法的简单示例: public Employee getByName(String name) { int id = database.find(name); if (id == 0) { return null; } return new Employee(id); } 这种方法有什么...

    系统错误null是什么意思

    Java中NULL用法的简单示例:

    public Employee getByName(String name) {
      int id = database.find(name);
      if (id == 0) {
        return null;
      }
      return new Employee(id);
    }

    这种方法有什么问题?

    它可能返回NULL而不是对象-这是错误的。 在面向对象的范例中, NULL是一种可怕的做法,应不惜一切代价避免使用NULL 。 已经有一些关于这个意见已经发布,包括空引用,数十亿美元的错误由Tony Hoare的介绍和整个对象思想由大卫-韦斯特的书。

    在这里,我将尝试总结所有的参数,并举例说明如何避免使用NULL并使用适当的面向对象的结构代替它们。

    基本上,可以使用NULL两种替代方法。

    第一个是Null Object设计模式(最好的方法是使其成为常数):

    public Employee getByName(String name) {
      int id = database.find(name);
      if (id == 0) {
        return Employee.NOBODY;
      }
      return Employee(id);
    }

    第二种可能的替代方法是在无法返回对象时抛出异常 ,从而快速失败

    public Employee getByName(String name) {
      int id = database.find(name);
      if (id == 0) {
        throw new EmployeeNotFoundException(name);
      }
      return Employee(id);
    }

    现在,让我们看看反对NULL的参数。

    除了上面提到的Tony Hoare的演示文稿和David West的书以外,我在写这篇文章之前阅读了这些出版物:Robert Martin的Clean Code ,Steve McConnell的Code Complete ,John Sonmez的“ No”到“ Null”是否返回无效的不良设计? StackOverflow上的讨论。

    临时错误处理

    每次获取对象作为输入时,都必须检查它是否为NULL或有效的对象引用。 如果忘记检查,则NullPointerException (NPE)可能会在运行时中断执行。 因此,您的逻辑将受到多次检查以及if / then / else分支的污染:

    // this is a terrible design, don't reuse
    Employee employee = dept.getByName("Jeffrey");
    if (employee == null) {
      System.out.println("can't find an employee");
      System.exit(-1);
    } else {
      employee.transferTo(dept2);
    }

    这就是应该用C和其他命令式程序语言处理异常情况的方式。 OOP引入了异常处理,主要是为了摆脱这些临时的错误处理块。 在OOP中,我们让异常冒泡直到它们到达应用程序范围的错误处理程序,并且我们的代码变得更加简洁明了:

    dept.getByName("Jeffrey").transferTo(dept2);

    考虑NULL引用是过程编程的继承,请改用1)Null对象或2)异常。

    模棱两可的语义

    为了明确传达其含义,必须将函数getByName()命名为getByNameOrNullIfNotFound() 。 每个返回对象或NULL函数都应该发生相同的情况。 否则,代码阅读器不可避免地会产生歧义。 因此,为了保持语义的明确性,应为函数指定更长的名称。

    要摆脱这种歧义,请始终返回真实对象,空对象或引发异常。

    有人可能会争辩说,为了性能起见,我们有时必须返回NULL 。 例如,当地图中没有这样的项目时,Java中接口Map get()方法将返回NULL

    Employee employee = employees.get("Jeffrey");
    if (employee == null) {
      throw new EmployeeNotFoundException();
    }
    return employee;

    由于Map使用NULL ,因此此代码仅搜索地图一次。 如果我们将Map重构,以便其方法get()在未找到任何内容的情况下将引发异常,则我们的代码将如下所示:

    if (!employees.containsKey("Jeffrey")) { // first search
      throw new EmployeeNotFoundException();
    }
    return employees.get("Jeffrey"); // second search

    显然,这种方法的速度是第一种方法的两倍。 该怎么办?

    Map界面(对其作者没有冒犯)具有设计缺陷。 它的方法get()应该一直返回一个Iterator以便我们的代码如下所示:

    Iterator found = Map.search("Jeffrey");
    if (!found.hasNext()) {
      throw new EmployeeNotFoundException();
    }
    return found.next();

    顺便说一句,这正是C ++ STL map :: find()方法的设计方式。

    计算机思维与对象思维

    有人知道Java中的对象是指向数据结构的指针,而NULL是指向0x00000000的指针(在Intel x86处理器中为0x00000000 if (employee == null)可以理解if (employee == null)语句。

    但是,如果您开始将其作为一个对象来考虑,那么这种说法就没有意义了。 这是从对象角度看我们的代码的样子:

    - Hello, is it a software department?
    - Yes.
    - Let me talk to your employee "Jeffrey" please.
    - Hold the line please...
    - Hello.
    - Are you NULL?

    对话中的最后一个问题听起来很奇怪,不是吗?

    相反,如果他们在我们请求与Jeffrey通话后挂断电话,则会给我们造成麻烦(异常)。 那时,我们尝试再次致电或通知主管,我们无法联系Jeffrey并完成更大的交易。

    或者,他们可以让我们与不是Jeffrey的其他人交谈,但是可以帮助我们解决大多数问题,或者在我们需要“特定于Jeffrey”的东西时拒绝帮助(空对象)。

    缓慢失败

    上面的代码不是快速失败 ,而是尝试缓慢消失,并杀死其他人。 它没有让所有人都知道出了什么问题并且应该立即开始异常处理,而是向客户端隐藏了此故障。

    该参数与上面讨论的“临时错误处理”非常接近。

    最好使代码尽可能脆弱,让代码在必要时中断。

    使您的方法对它们操作的数据极为苛刻。 如果提供的数据不足或根本不适合该方法的主要使用场景,请让他们通过引发异常来抱怨。

    否则,返回一个Null对象,该对象暴露出一些常见行为,并在所有其他调用上引发异常:

    public Employee getByName(String name) {
      int id = database.find(name);
      Employee employee;
      if (id == 0) {
        employee = new Employee() {
          @Override
          public String name() {
            return "anonymous";
          }
          @Override
          public void transferTo(Department dept) {
            throw new AnonymousEmployeeException(
              "I can't be transferred, I'm anonymous"
            );
          }
        };
      } else {
        employee = Employee(id);
      }
      return employee;
    }

    可变和不完整的对象

    通常, 强烈建议设计时牢记不变性的对象。 这意味着对象在实例化过程中会获得所有必需的知识,并且在整个生命周期中都不会改变其状态。

    通常,在延迟加载中使用NULL值,以使对象不完整且可变。 例如:

    public class Department {
      private Employee found = null;
      public synchronized Employee manager() {
        if (this.found == null) {
          this.found = new Employee("Jeffrey");
        }
        return this.found;
      }
    }

    该技术尽管被广泛使用,但在OOP中却是一种反模式。 主要是因为它使对象负责计算平台的性能问题,而这是Employee对象不应该意识到的。

    对象不必管理状态并公开其与业务相关的行为,而必须处理其自身结果的缓存-这就是延迟加载的意义所在。

    缓存不是员工在办公室里做的事情,对吗?

    解决方案? 请勿以上述原始方式使用延迟加载。 相反,请将此缓存问题移至应用程序的另一层。

    例如,在Java中,您可以使用面向方面的编程方面。 例如, jcabi-aspects具有@Cacheable批注,用于缓存方法返回的值:

    import com.jcabi.aspects.Cacheable;
    public class Department {
      @Cacheable(forever = true)
      public Employee manager() {
        return new Employee("Jacky Brown");
      }
    }

    我希望这种分析令人信服,您将停止NULL您的代码!

    相关文章

    您可能还会发现以下有趣的帖子:

    翻译自: https://www.javacodegeeks.com/2014/09/why-null-is-bad.html

    系统错误null是什么意思

    展开全文
  • c语言中NULL到底是什么?

    千次阅读 2021-04-14 19:53:11
    1.NULL在C/C++中定义为: #ifdef _cplusplus // 定义这个符号就表示当前是C++环境 #define NULL 0 // 在C++中NULL就是0 #else #define NULL (void *)0 // 在C中NULL是强制类型转换为void *的0 #endif 2.由上可知,...

    C语言中NULL到底是什么?

    1.NULL在C/C++中定义为:
    #ifdef _cplusplus // 定义这个符号就表示当前是C++环境
    #define NULL 0 // 在C++中NULL就是0
    #else
    #define NULL (void *)0 // 在C中NULL是强制类型转换为void *的0
    #endif
    2.由上可知,在C和C++中NULL是略有差异的,在C++中NULL就是数字0,在C中NULL是个指针变量,指向地址0。在C语言中,int *p;你可以p = (int *)0;但是不可以p = 0;因为类型不相同。

    NULL有什么作用?

    1.C语言的精髓是指针,指针是可以指向内存地址,程序员可以直接读写内存,好处是效率高,坏处是如果访问的内存是不该访问的内存地址,就会造成段错误或者非法修改数据导致程序运行异常。所以在C语言中,对指针变量的引用要谨慎。
    2.当我们定义一个局部指针变量时,因为临时变量都是从栈申请的,变量的初值都是随机的,导致刚申请的指针变量指向的内存地址是不可预知的。至于为什么临时变量申请的初值是随机的,可以参考另一篇博客
    《C语言与堆栈的理解》。如果我们定义了一个变量而没有去初始化,直接解引用,会导致段错误或者修改了不该访问的内存地址处的数据。导致段错误已经是非常好的情况的,会生成core文件,比较容易发现;最怕的是程序没有报错,而是指针刚好指向了一个可以访问的内存地址,通过这个指针变量把一些不该修改的数据给改掉了。
    3.简单来说,NULL的作用就是当一个指针变量没有被显性初始化时,将该指针变量的值赋为NULL。解引用前判断指针变量是否为NULL,如果为NULL说明该指针没有初始化过,不可解引用。

    为什么要将未初始化的指针变量指向NULL?

    1.首先解引用一个指向未知地址的指针变量是很危险的,由此我们需要判断一个指针变量是否已经被初始化。于是行形成一个规定,定义一个指针变量时就将其赋值为NULL,只要我们判断一个指针是NULL,就是未初始化不可解引用的。这样可以防止我们错误的解引用指针。
    2.NULL是一个特殊的地址,在操作系统中定义该地址是不可以访问的,我猜测NULL也就是0地址是操作系统内核的地址,用户是不可访问的。一旦我们去解引用NULL地址,就会报段错误。报错误这已经是非常好的结果了,可以让我们及时的发现错误。

    展开全文
  • C/C++中的NULL到底是什么

    千次阅读 2019-11-10 22:39:07
    如果暂时不明确该指针指向哪个变量,则需要赋予NULL值。除了NULL之外,C++11新标准中又引入了nullptr来声明一个“空指针”,这样,我们就有下面三种方法来获取一个“空指针”: 如下: int *p1 = NULL; // ...
  • &>/dev/null表示的意思

    万次阅读 多人点赞 2019-04-24 18:56:07
    这条命令的意思是将标准输出和错误输出全部重定向到/dev/null中,也就是将产生的所有信息丢弃. 下面就为大家来说一下,  command > file 2>file  与 command > file 2>&1  有什么不同的地方.  首先  ...
  • Java: null是什么??

    千次阅读 多人点赞 2019-05-02 20:01:17
    null是什么? 在学习过对象的实例化之后, 我们知道对象的实例化就是为对象的创建开辟存储空间。 对于一条实例化语句:Student stu=new Student(); //语句1 先是声明一个名为stu的Student类型变量,然后利用new...
  • java中的null的基本含义

    千次阅读 2020-02-26 14:04:44
    null到底是什么? 1.null是Java中的关键字。它是区分大小写的,如果把null大写成Null或者NULL,会自动报错。 2.null ==> 0x0 表示内存中编号为0的地址 该地址受到系统保护,任何程序读取,写入0x0地址,系统直接...
  • mysql中 not null default ''是啥意思?

    千次阅读 2019-10-14 20:05:42
    mysql中 not null default ''是啥意思? s_name VARCHAR(20) NOT NULL DEFAULT ‘’ 或者s_name VARCHAR(20) NOT NULL DEFAULT '0 是啥意思? 我们在建表语句中经常见到这样一句话: not null default ‘’ 或者 not ...
  • mysql设置not nullnull区别

    千次阅读 2017-12-28 15:28:37
    mysql设置not nullnull区别
  • SQL 中的 NULL 你真的懂了吗?【数据库|SQL】

    千次阅读 多人点赞 2020-03-13 19:45:42
    SQL 中的 NULL (译自 NULL Values in SQL Queries) SQL 中的 NULL 到底是怎样一个概念呢?有什么要注意的吗?这篇文章就是要把它讲清楚。 查询某列值为 NULL 的数据 当想查询某一列值为 NULL 的数据时,下面两种...
  • Java String类型和null一点认识

    千次阅读 2019-09-15 17:11:39
    先来谈谈Java中null是什么 null是关键字,是区分大小写的,不能写成NullNULL或其它 null是所有引用类型的默认值,注意是引用类型,不是基本类型 null既不是一种对象,是特殊的值,可以将null赋值给所有引用类型,...
  • js里的null到底是什么?

    千次阅读 2019-10-15 09:38:48
    使用typeof null得到的null是object.所以,它是一个对象??? 先看一个小栗子. 前提:引用W3school Boolean() 函数 当要转换的值是至少有一个字符的字符串、非 0 数字或对象时,Boolean() 函数将返回 true。 ...
  • C/C++中对NULL的理解与总结

    千次阅读 2019-02-21 20:18:57
    NULL 起初我们知道, NULL其实就是代表空指针的宏, 其本质上就是 0, 表示不指向任何内存的空指针 但是, 我们看这段代码: int* p = (void*)NULL; ...
  • 指针赋值为NULL;是什么意思呢?

    万次阅读 多人点赞 2014-04-02 09:41:43
    这个NULL是什么意思?  网上百度了下,有人说NULL=0;是在头文件中定义的;  首先要说的是:非堆分配的内存是不需要free的。  再说p=NULL;指针的变化是 p指向了一个地址为0的内存,这就提醒别人不要对这个...
  • 如何用js判断null

    万次阅读 2018-11-01 19:46:32
    我们在开发的时候经常会判断一个null值,那么我们该如何去判断呢?这篇文章就教大家如何用js判断null值的方法,分别用两种方法来对比一下如何正确用js判断null值。 以下是不正确的方法: var exp=null; if(exp==...
  • python dropna()和notnull()用法差别

    千次阅读 2019-09-01 18:25:38
    当未精确定位到某一列,但该列中存在空值时,dropna()会将空值所在行删除,而notnull()不会 在精确定位到某一列后,dropna()会输出series,而notnull()输出DataFrame print(frame1) print('\n') print(frame1.a....
  • 引用高的地图,在地图上添加点标记,折线,多边形时,若坐标经纬度为空时会报错。 原生 JS 中报错: Uncaught Invalid Object: Pixel(NaN, NaN) Vue 项目中报错: ...Uncaught (in promise) Invalid Object: ...
  • 用? 大多数人的回答是:"NULL就是系统定义特殊的0,把你初始化的指针指向它,可以防止“野指针”的恶果。" 今天碰到一个C语言的笔试题,还是一道不错的题~~~ Exp 1: #include void fun(int *node) {...
  • 无效使用NULL

    千次阅读 热门讨论 2013-12-08 23:54:48
    在数据库中,某一字段中为空时就显示NULL 但在VB里,要显示这一字段,就会出现实时错误94,无效使用NULL 例如下图: 最后一次记录,没有下机,则注销日期,时间,机器名都是空值NULL 为了保证字段为空时不报错,则...
  • java中当给一个对象赋值为null时发生了什么

    万次阅读 多人点赞 2017-02-23 17:35:46
    arr=null;将arr这个引用置空,不指向任何对象。 上面new的那个数组对象,则没有任何引用指向它,垃圾回收器可以回收此对象。java中对象引用放在栈中,对象的实例放于堆中,一个对象要是只声明不赋值,则只会在内存...
  • java.lang.nullpointerexception是什么意思?java.lang.nullpointerexception怎么解决? 接下来就帮你解决它!!! 这个异常大家肯定都经常遇到,异常的解释是"程序 遇上了空指针",简单地说就是调用了未经初始化...
  • 出现Cannot read property 'xxxxxx' of null的错误时,未必是前端js的问题,可能是后台传过来的值导致前台报错。 原文地址:https://blog.csdn.net/ayhao369csdn/article/details/80998090 ...
  • 在使用vue+elementUI展示数据时,时常会用到table的row-key属性,猫哥早期使用时时常会碰到以下报错信息“Cannot read property 'reduce' of null”,网上很多资料推测是vue和elementUI版本不一致导致。经过博主排查...
  • Cannot read property 'width' of null ---easyui

    千次阅读 2019-02-15 14:04:01
    出现这种问题要看datagrid的filed有没有写对 或者其他任何属性名有没有写正确,出现这种情况通常是因为无法识别属性名导致的
  • 关于oracle中的not null约束

    千次阅读 2015-12-01 21:06:55
    写在开始处:这是 茉茉 的第一篇博客,今天是 茉茉 实习的第一个月的倒数第二天(茉茉是11月3号开始实习的呢) oracle中一个字段不能同时设置 not null 约束 和 默认值么?
  • 跟踪断点一直到添加完参数,都没有问题,请求网络时报异常,深入跟踪了代码,解析param出异常,最终确定上图param里参数platecolor为null,解决方案:客户没有选择颜色参数时默认platecolor=“”;
  • C语言中定义指针==NULL意思

    千次阅读 2016-10-27 18:16:09
    用于指将指针 悬空(不指向任何位置) int *p=NULL;

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 483,163
精华内容 193,265
关键字:

null啥意思