先放一张图片作为引入:

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

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

首先,我创建了个变量,上图的 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); 只是它是隐式的,你看不到罢了
简单的记住,我们通过给变量赋值,就是通过栈区里的变量引用堆区里的值。

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

走出 null 就是空值的误区,以及变量赋值原理的更多相关文章

  1. Sql Server查询性能优化之走出索引的误区

    据了解绝大多数开发人员对于索引的理解都是一知半解,局限于大多数日常工作没有机会.也什么没有必要去关心.了解索引,实在哪天某个查询太慢了找到查询条件建个索引就ok,哪天又有个查询慢了,再建立个索引就是, ...

  2. 走出MFC子类化的迷宫

    走出MFC子类化的迷宫 KEY WORDS:子类化 SUBCLASSWINDOW  MFC消息机制 许多Windows程序员都是跳过SDK直接进行RAD开发工具[或VC,我想VC应不属于RAD]的学习 ...

  3. 在8X8的棋盘上分布着n个骑士,他们想约在某一个格中聚会。骑士每天可以像国际象棋中的马那样移动一次,可以从中间像8个方向移动(当然不能走出棋盘),请计算n个骑士的最早聚会地点和要走多少天。要求尽早聚会

    在8X8的棋盘上分布着n个骑士,他们想约在某一个格中聚会.骑士每天可以像国际象棋中的马那样移动一次,可以从中间像8个方向移动(当然不能走出棋盘),请计算n个骑士的最早聚会地点和要走多少天.要求尽早聚会 ...

  4. ofo走出校园观察:市场定位导致产品错位?

    Ofo和摩拜单车虽然同样都是做单车共享,但实际上两者在最初的市场定位是有明显的差异的,因此提供的产品方案也存在巨大的差异. 市场定位不同,导致产品方案的巨大差异 摩拜单车一开始就定位于开放市场,充分的 ...

  5. js中的undefined与null、空值的比较

    最近在修改一个项目,总是报Js错误: 无法获取属性“length”的值: 对象为 null 或未定义 点开调试之后,惊奇的发现markerArr的值是undefined 所以我就将代码改成如下形式: ...

  6. 为什么DIY报价----走出软件作坊:三五个人十来条枪 如何成为开发正规军(十二)[转]

    前段时间,写了一个开发.实施.服务费用计算三部曲. 水清则无鱼--走出软件作坊:三五个人十来条枪 如何成为开发正规军(八) 实施费用也能DIY--走出软件作坊:三五个人十来条枪 如何成为开发正规军(九 ...

  7. 将服务费用DIY到底----走出软件作坊:三五个人十来条枪 如何成为开发正规军(十)[转]

    前一段时间,讲了一系列开发经理.实施经理.服务经理的工具箱:开发经理的工具箱---走出软件作坊:三五个人十来条枪 如何成为开发正规军(三) ,实施经理的工具箱--走出软件作坊:三五个人十来条枪 如何成 ...

  8. 走出测试,走向CEO

    飞测说:大家好,我们又见面了,我是黑夜小怪.不巧,今晚加班回来路上,湿身了,淋了个落汤鸡,不过明天也许可以看海了,也就呵呵了,原本想回来后聊些技术的,现在突然想先聊聊我的一些想法,仅供交流. 走出测试 ...

  9. Oracle NULL 和空值

      如果你工作中用到了Oracle,你必须要留意NULL和空值的处理与SQL Server上的不同.现在让我们看些例子. 建立这张数据库表并插入记录 CREATE TABLE TestNull(Col ...

随机推荐

  1. 分治法(一)(zt)

    这篇文章将讨论: 1) 分治策略的思想和理论 2) 几个分治策略的例子:合并排序,快速排序,折半查找,二叉遍历树及其相关特性. 说明:这几个例子在前面都写过了,这里又拿出来,从算法设计的策略的角度把它 ...

  2. 两种方式连接mysql

    一种方式:运行命令符后,mysql -u root -p(如果不成功,说明环境变量没配,命令行到 mysql的bin目录下,然后运行mysql -u root -p 应该成功了) 另外一种方式,直接有 ...

  3. WPF 之 左键弹出操作菜单,并禁用右键菜单

    在目前的WPF版本中,很多的控件都有一个ContextMenu的属性,可以设置组件的右键菜单,这点确实是很方便,但是有些时候我们可能会需要当单击鼠标左键才弹出这个ContextMenu,而不是单击鼠标 ...

  4. double数值多时系统默认科学计数法解决方法

    比如 Double d = new Double("1234567890.12"); System.out.println("d:="+d); java.tex ...

  5. NSURLConnection 网络超时的那些事(转别人整理的)

    NSURLConnection 网络超时的那些事(转别人整理的) 在ios平台上做网络开发最常用的两个类: NSMutableURLRequest *urlRequest = [[NSMutableU ...

  6. [Java] final的意义

    1.如果一个数据既是static又是final,那么它会拥有一块无法改变的存储空间. 2.final data: 当final用于基本数据类型时,final让其值(value)保持不变,但是当用于ob ...

  7. 将Winform程序快速转换为在浏览器中运行的程序

    http://www.codeproject.com/Articles/31429/Embedding-a-NET-WinForms-Application-in-an-Interne 详见以上文章. ...

  8. 利用dex2jar反编译apk

    下载工具dex2jar和jd-gui ,解压 将要反编译的APK后缀名改为.rar或则 .zip,并解压,得到其中的额classes.dex文件(它就是java文件编译再通过dx工具打包而成的) 将获 ...

  9. Neither the JAVA_HOME nor the JRE_HOME environment variable is defined

    执行远程shell,启动远程机器的tomat时遇到次错误.后来发现原来是远程机器的.profile被人改掉了! 在.profile里加入 export JAVA_HOME=/home/evans/jd ...

  10. 怒刷DP之 HDU 1114

    Piggy-Bank Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit S ...