精华内容
下载资源
问答
  • 2019-02-16 12:40:31

    NULL是什么意思

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

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

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

    使用IS NULL来进行NULL判断

    更多相关内容
  • null到底是什么? 1.null是Java中的关键字。它是区分大小写的,如果把null大写成Null或者NULL,会自动报错。 2.null ==> 0x0 表示内存中编号为0的地址 该地址受到系统保护,任何程序读取,写入0x0地址,系统直接杀死...
  • c语言null什么意思

    千次阅读 2021-05-21 09:35:36
    在C语言中,NULL和0的值都是一样的,但是为了目的和用途及容易识别的原因,NULL用于指针和对象,0用于数值。NULL就是系统定义特殊的0,把你初始化的指针指向它,可以防止“野指针”的恶果。C语言中又定义,定义如下...

    9a0f09e064a46087f8a3028b78e91ab9.png

    在C语言中,NULL和0的值都是一样的,但是为了目的和用途及容易识别的原因,NULL用于指针和对象,0用于数值。

    NULL就是系统定义特殊的0,把你初始化的指针指向它,可以防止“野指针”的恶果。

    C语言中又定义,定义如下:#undef NULL

    #if defined(__cplusplus)

    #define NULL 0

    #else

    #define NULL ((void *)0)

    #endif

    所以我觉得,如果一个指针被赋予NULL,应该就相当于这个指针执行了0x0000这个逻辑地址,但是C语言中0x0000这个逻辑地址用户是不能使用的(有些人说是因为0x0000没有映射到物理地址,也有人说是因为0x0000映射到的地址是操作系统用于判断野指针的,我也不太懂,总之就是用户不能使用啦),所以当你试图取一个指向了NULL的指针的内容时,就会提示段错误,听着有点绕,看程序:int *node=NULL;

    int a=0;

    a=*node;

    printf("%d\n",a);

    由于node执行的是NULL,也就是逻辑地址0x0000,而这个地址用于是不能访问的,所以编译器提示段错误。

    还在网上看到了一个面试题,和这个问题有关,分享一下:#include

    void fun(int *node)

    {

    static int N=100;

    node=&N;

    }

    int main()

    {

    int *node=NULL;

    int a=0;

    fun(node);

    a=*node;

    printf("%d\n",a);

    return 0;

    }

    运行结果依然是段错误。因为函数是值传递,node指针变量的值并没有被改变,所以这个程序的效果和上一个程序的效果是一样的。

    如果要让结果为100,应该怎样写代码呢? 答案是 传递node指针变量的指针给fun,也就是传递一个二级指针,当然相应的fun函数也应该做出改变,代码如下:#include

    void fun(int ** node)

    {

    static int N=100;

    *node=&N;

    }

    int main()

    {

    int *node=NULL;

    int a=0;

    fun(&node);

    a=*node;

    printf("%d\n",a);

    return 0;

    }

    更多web开发知识,请查阅 HTML中文网 !!

    展开全文
  • 一.NULL在C/C++中的标准定义(1)NULL不是C语言关键字,本质上是一个宏定义(2)NULL的标准定义:#ifdef _cplusplus //条件编译#define NULL 0#else#define NULL (void *)0 //这里对应C语言的情况#endif解释:C++的编译...

    一.NULL在C/C++中的标准定义

    (1)NULL不是C语言关键字,本质上是一个宏定义

    (2)NULL的标准定义:

    #ifdef _cplusplus                      // 条件编译

    #define NULL 0

    #else

    #define NULL (void *)0            // 这里对应C语言的情况

    #endif

    解释:C++的编译环境中,编译器预先定义了一个宏_cplusplus,程序中可以用条件 编译来判断当前的编译环境是C++的还是C的。

    NULL的本质解析:NULL的本质是0,但是这个0不是当一个数字解析,而是当一个内存地址来解析的,这个0其实是0x00000000,代表内存的0地址。(void *)0这个整体表达式表示一个指针,这个指针变量本身占4字节,地址在哪里取决于指针变量本身,但是这个指针变量的值是0,也就是说这个指针变量指向0地址(实际是0地址开始的一段内存)。

    二.从指针角度理解NULL的本质

    (1)int *p;          //p是一个函数内的局部变量,则p的值是随机的,也就是说p是一个野指针。

    (2)int *p = NULL;     // p是一个局部变量,分配在栈上的地址是由编译器决定的,我们不必关心,但是p的值是(void *)0,实际就是0,意思是指针p指向内存的0地址处。这时候p就不是野指针了。

    (3)为什么要让一个野指针指向内存地址0处?主要是因为在大部分的CPU中,内存的0地址处都不是可以随便访问的(一般都是操作系统严密管控区域,所以应用程序不能随便访问)。所以野指针指向了这个区域可以保证野指针不会造成误伤。如果程序无意识的解引用指向0地址处的野指针则会触发段错误。这样就可以提示你帮助你找到程序中的错误。

    三.为什么需要NULL

    (1)第一个作用就是让野指针指向0地址处安全。

    (2)第二个作用就是一个特殊标记。按照标准的指针使用步骤是:

    int *p = NULL;         // 定义p时立即初始化为NULL

    p = xx;

    if (NULL != p)

    {

    *p                           // 在确认p不等于NULL的情况下才去解引用p

    }

    p = NULL                  //用完之后p再次等于NULL

    注意:一般比较一个指针和NULL是否相等不写成if (p == NULL),而写成if (NULL == p)。原因是第一种写法中如果不小心把==写成了=,则编译器不会报错,但是程序的意思完全不一样了;而第二种写法如果不小心把==写成了=则编译器会发现并报错。

    注意不要混用NULL与'\0'

    (1)'\0' 和 '0' 和 0  和 NULL几个区分开。

    (2)'\0'是一个转义字符,他对应的ASCII编码值是0,本质就是0

    (3)'0'是一个字符,他对应的ASCII编码值是48,本质是48

    (4)0是一个数字,他就是0,本质就是0

    (4)NULL是一个表达式,是强制类型转换为void *类型的0,本质是0.

    总结:'\0'用法是C语言字符串的结尾标志,一般用来比较字符串中的字符以判断字符串有没有到头;'0'是字符0,对应0这个字符的ASCII编码,一般用来获取0的ASCII码值;0是数字,一般用来比较一个int类型的数字是否等于0;NULL是一个表达式,一般用来比较指针是否是一个野指针

    C语言的一些“小动作”:

    (1)高级语言中有一些元素是机器中没有的

    (2)高级语言在运算中允许我们大跨度的运算。意思就是低级语言中需要好几步才能完成的一个运算,在高级语言中只要一步即可完成。譬如C语言中一个变量i要加1,在C中只需要i++即可,看起来只有一句代码。但实际上翻译到汇编阶段需要3步才能完成:第1步从内存中读取i到寄存器,第2步对寄存器中的i进行加1,第3步将加1后的i写回内存中的i。

    展开全文
  • 系统错误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是什么意思

    展开全文
  • null表示什么

    千次阅读 2021-04-20 08:19:08
    Null 翻译为“空的”。在计算机中常表示无结果,空值。是一种表示这个指标并不指向任何的对象的引用,它的元素只有“零”,Null 是在计算中具有保留的值,用于指示指针不引用有效对象。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.由上可知,...
  • Java: null是什么??

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

    千次阅读 多人点赞 2020-04-30 13:37:09
    在日常使用数据库时,你在意过NULL值么? 其实,NULL值在数据库中是一个很特殊且有趣的存在,下面我们一起来看看吧; 在查询数据库时,如果你想知道一个列(例如:用户注册年限 USER_AGE)是否为 NULL,SQL ...
  • null与not nullnull与空值''的区别

    千次阅读 2019-05-29 20:27:23
    相信很多用了MySQL很久的人,对这两个字段属性...2.为毛not null的效率比null高 3.判断字段不为空的时候,到底要 select * from table where column <> '' 还是要用 select * from table wherecolumn is not ...
  • null什么意思

    千次阅读 2020-12-21 13:52:05
    null什么意思[编辑]概述null不是特殊字符没有特别的意思,但一般程序在用到它是都在开始声明它值为空,所以它在程序中的含义为空。在面向对象的语言里,是表示没有初始化既空对象C或c++里,大多指空指针不指向任何...
  • 数据库字段为什么要使用NOT NULL

    千次阅读 2021-04-12 15:23:39
    = 失效2.3 NULL与其他值运算结果为NULL2.4 对distinct、group by、order by等排序结果的影响3 对索引的影响4 对存储空间的影响 目前大部分的开发都会把字段全部设置成NOT NULL并且给默认值。通常,对于默认值一般...
  • mysql设置not nullnull区别

    千次阅读 2017-12-28 15:28:37
    mysql设置not nullnull区别
  • c语言中的null_如何在C中使用NULL

    千次阅读 2020-08-31 01:32:51
    c语言中的nullSeveral programming languages make use of the concept of null. 几种编程语言都使用null的概念。 Go has nil, JavaScript has null, Python has None, and so on. Go具有nil ,JavaScript具有...
  • js里的null到底是什么?

    千次阅读 2019-10-15 09:38:48
    使用typeof null得到的null是object.所以,它是一个对象??? 先看一个小栗子. 前提:引用W3school Boolean() 函数 当要转换的值是至少有一个字符的字符串、非 0 数字或对象时,Boolean() 函数将返回 true。 ...
  • spring 或 springboot 的 websocket 里面使用 @Autowired 注入 service 或 bean 时,报空指针异常,service 为 null(并不是不能被注入)。 解决方法:将要注入的 service 改成 static,就不会为null了。 参考代码:...
  • LINUX命令后面常见的>/dev/null 解释

    千次阅读 2019-10-24 17:08:34
    Linux中的标准输入输出 0 是标准输入,一般是从键盘获得输入 1 是标准输出,一般是输出到屏幕了 2 是标准错误,有时候屏幕上可以看到,.../dev/null意思就是把错误输出到“黑洞” ,也就是说如果你的命令出错...
  • Mysql:允许Null意思

    千次阅读 2021-02-05 05:35:47
    为了理解“Allow Null”是什么意思,您需要了解什么是NULL,并且理解它与简单的零或空白字符串不同。NULL是SQL中的一个特殊值。它表示不存在的数据。这与空白的数据不同。当您在MySQL中创建表时,它允许您指定是否...
  • 深入详解SQL中的Null

    万次阅读 多人点赞 2015-03-18 20:10:42
    NULL 在计算机和编程世界中表示的是未知,不确定。虽然中文翻译为 “空”, 但此空(null)非彼空(empty)。 Null表示的是一种未知状态,未来状态,比如小明兜里有多少钱我不清楚,但也不能肯定为0,这时在计算机中就使用...
  • =null,就这样产生了bug.........,后面改成is not null就查出来了!!!于是百度了一下, 解释如下:在mysql中,筛选非空的时候经常会用到is not null和!=null,这两种方法单从字面上来看感觉...
  • 总结在最后,没干货 简单测试了4种类型 bigint tinyint varchar char 单引号 ‘’ 双引号 “” 自定义的默认值 如: 未知的姓名 =================================================== 新建一张用户表 CREATE ...
  • /dev/null的含义

    千次阅读 2016-09-20 19:15:04
    log > /dev/null 2>&1 命令的结果可以通过%>的形式来定义输出 /dev/null :代表空设备文件 >  :代表重定向到哪里,例如:echo "123" > /home/123.txt 1  :表示stdout标准输出,系统默认值是1...
  • C语言的 NULL是什么

    千次阅读 2016-07-15 14:37:33
    C语言的 NULL是什么 悬赏分:0 - 解决时间:2007-12-13 22:22空指针是怎么利用的!举个例子好吗?比如:if(fp=("I:\\woailuo.c","r"==NULL) \*fp是文件指针*\对文件操作成功返回值就是空指针吗? 提问者: wchjai -...
  • @NotNull和@NonNull的区别和使用

    千次阅读 2019-12-09 12:30:06
    @NotNull在类字段中使用,表示该字段不能为空。它是 JSR303(Bean的校验框架)的注解。在调用controller的方法中加入@Valid就可以验证该方法参数中该类的对应属性是否为空,如果为空,注解中的提示信息会保存在...
  • MATLAB——null函数

    千次阅读 2018-01-05 20:58:00
    MATLAB函数null用来求解零空间,即满足方程组A*X=0的解空间。实际上是求出解空间的一组解(基础解系)。 语法:z=null(A) %z的列向量为方程组的正交规范基,满足z' x z=I。 z=null(A,'r') %z的列向量是方程A*X=0的...
  • excel导入数据时null值的处理

    千次阅读 2020-03-21 16:08:42
    场景 excel导入数据时,空文本转换金额报错。 问题分析 如amount字段,后台明明...原因是excel空文本,传到后台是"null"字符串。这样过滤条件过滤不掉它,Double.valueof(amount);会报错。 解决方案 代码处理 添加...
  • 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 ...
  • Java中的注解 - @NotNull

    万次阅读 多人点赞 2019-02-28 09:24:57
    if (annotation instanceof NotNull && fieldValue == null) { System.out.println(field.getName() + " can't be null"); } } // 方法2 Annotation annotation = field.getAnnotation(NotNull.class); if ...
  • 意思是一样,都是用于判断是否为null(空),但是假如你du用不同的输入在计算机zhi上,null== a 识别度更dao高,编写代码中null==的表示更加规范,由于a=null是一个恒为真的的等式,所以为防止输入错误,通用为null=...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 544,824
精华内容 217,929
关键字:

null啥意思

友情链接: jjoadd27.rar