zoukankan      html  css  js  c++  java
  • 走出 null 就是空值的误区,以及变量赋值原理

    先放一张图片作为引入:

    演示图.jpg

    这里我用了一个示意图作为讲解:


    平时,我们写的变量为什么能在我们调用它的时候就能被我们拿到所用,跟存钱罐一样,你往里面存一元大洋,它里面就有一元大洋,那么我们的变量在被我们创建出来的时候被存放在哪呢?内存!内存被分为几大块,只是我们平时不知道,内存大体被分为几大块,其中有三大块我们经常用到,栈区堆区常量区


    首先,我创建了个变量,上图的 num 当我 var num : Number 的时候这个时候,我们只是简单的创建了一个变量,这个时候的变量是没有任何意义的,它只是在栈区里开辟了一块内存,给这段内存一个标记 num ,接下来我们要对它进行赋值,如 : var num : Number = 123; 当我们给它赋值的时候,实际内存为我们在堆区里开辟了一块内存,这时候内存里放的才是真正我们所需要的值 123 ,这个时候栈里的变量 num 引用了堆里的值 123 ,这个时候才是真正的符合我们的需要。


    在内存里还有一块区域叫 常量区 ,里面放置了一些恒古不变的数据当我们的var str:String = null;的时候,这个时候引用了我们常量区里的值null,而并没有引用我们堆里的值,所以这个时候我们的str变量并没有引用到具体的一个值,这个时候str也并没有被初始化,而下面的str1它引用的空值,实际上,内存已经为它在堆区里开辟了一块内存,只是这个时候放的是空值,用个小测试就能得到这个证明:


    var str:String = null;
    var str1:String = "";
    trace(str.length);
    trace(str1.length);


    str 返回 undefined;

    str1返回0;


    还有个问题我也要特别提醒一些新手,new 这个关键字我相信大家已经非常熟悉了,new 的真正意义是什么呢?


    实际上你每 new 一次,就相当于在堆区里开辟一个存储空间至于存储的什么类型,那就是你 new 什么类型,里面放的就什么类型。


    其实上面的 num, str 它直接赋值只是你们看到的假象,在Flash的内核里实际上它帮你做了自动转换,如:
    var num:Number = 123; 它实际上帮你做的事是 var num : Number = new Number(123); 只是它是隐式的,你看不到罢了
    简单的记住,我们通过给变量赋值,就是通过栈区里的变量引用堆区里的值。


    以上是本人简单的做了下讲解,希望对大家有帮助,关于内存分区的内容太多,这里就不一一讲解了,有兴趣的朋友可以查阅相关资料进行加深理解。

  • 相关阅读:
    vue的学习总结---事件处理
    记一次写入导出优化,分别基于poi的SXSSF和阿里的EasyExcel
    linux系统tomcat部署SpringBoot+vue前后端分离项目正式部署
    java中各jar的作用
    记一次SpringBoot集成WebService使用Postman进行的测试
    搭建VUE
    查看window进程,并杀死进程
    卸载 nginx 彻底删除
    ubuntu16.04 安装 nginx 服务器
    Linux ubuntu ... root 初始化密码设置
  • 原文地址:https://www.cnblogs.com/uppercloud/p/C-null.html
Copyright © 2011-2022 走看看