先放一张图片作为引入:

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

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

首先,我创建了个变量,上图的 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. ios开发——实用技术篇Swift篇&拍照

    拍照 // MARK: - 拍照 func fromPhotograph() { if UIImagePickerController.isSourceTypeAvailable(.Camera) { ...

  2. 关于c中的%x及其它格式化符

    原文:http://blog.csdn.net/lincyang/article/details/6252443 格式化: %x表示按16进制输出:int a = 16;%02x:输出10:%03x: ...

  3. WPF 之 WPF应用程序事件

    当新建一个wpf应用程序,会自动生成一个App.xaml和MainWindow.xaml文件. 其中 App.xam 用来设置Application,应用程序的起始文件和资源及应用程序的一些属性和事件 ...

  4. IOS 沙盒机制 && 关于document\library\tmp的灵活使用

    默认情况下,每个沙盒含有3个文件夹:Documents, Library 和 tmp.因为应用的沙盒机制,应用只能在几个目录下读写文件Documents:苹果建议将程序中建立的或在程序中浏览到的文件数 ...

  5. iOS 网络/本地 图片 按自定义比例缩放 不失真 方法

    我尝试了很多种方法,终于,设计了一个方法,能按自己规定的大小压缩 还没失真 如果以后不好用 我再升级 分享给大家: + (CGRect )scaleImage:(UIImage *)image toS ...

  6. 4. Android框架和工具之 android-async-http

    1. android-async-http   简介 主要有以下功能: (1)发送异步http请求,在匿名callback对象中处理response信息: (2)http请求发生在UI(主)线程之外的 ...

  7. Oracle数据库SQL优化

    SQL优化的最终目的是用户体验-在最短时间内让用户在页面数据.因此,执行时间是SQL优化的重要指标.在SQL查询中,I/O操作最占系统性能的.I/O操作量越大,时间越久.减少I/O操作量是优化SQL的 ...

  8. JdbcTemplate 、NamedParameterJdbcTemplate、SimpleJdbcTemplate的区别

    一.JdbcTemplate 首先在配置文件中设置数据源 <bean id="dataSource" class="org.springframework.jdbc ...

  9. codeforces 590A A. Median Smoothing(思维)

    题目链接: A. Median Smoothing time limit per test 2 seconds memory limit per test 256 megabytes input st ...

  10. 轻松绕过极域电子教室、和教师控制 Say GoodBye

    注意:以下博文(包括但不限于汉字.英文.阿拉伯数字 .图片.影像,以及前述之各种任意组合等等)均为随意敲击键盘所出,用于检验本人电脑键盘录入.屏幕显示的机械.光电性能,并不代表本人观点.如需要详查请直 ...