文章标队和栈的一些区别
2016-03-31 23:35
197 查看
具体详细信息:http://baike.baidu.com/link?url=eJo_J2PdOrWflio6PpPX64lX6lltMEWnw89G8jlGstYYshvUbYtU1eFf1KKWMP4mIlNSPO9R4e-d9mOH-XLNpq
编译器先处理int a= 3;首先它会在栈中创建一个变量为a的内存空间,然后查找有没有字面值为3的地址,没找到,就开辟一个存放3这个字面值的地址,然后将a指向3的地址。接着处理int b= 3;在创建完b的引用变量后,由于在栈中已经有3这个字面值,便将b直接指向3的地址。这样,就出现了a与b同时均指向3的情况。
特别注意的是,这种字面值的引用与类对象的引用不同。假定两个类对象的引用同时指向一个对象,如果一个对象引用变量修改了这个对象的内部状态,那么另一个对象引用变量也即刻反映出这个变化。相反,通过字面值的引用来修改其值,不会导致另一个指向此字面值的引用的值也跟着改变的情况。如上例,我们定义完a与b的值后,再令a=4;那么,b不会等于4,还是等于3。在编译器内部,遇到a=4;时,它就会重新搜索栈中是否有4的字面值,如果没有,重新开辟地址存放4的值;如果已经有了,则直接将a指向这个地址。因此a值的改变不会影响到b的值。
编译器先处理int a= 3;首先它会在栈中创建一个变量为a的内存空间,然后查找有没有字面值为3的地址,没找到,就开辟一个存放3这个字面值的地址,然后将a指向3的地址。接着处理int b= 3;在创建完b的引用变量后,由于在栈中已经有3这个字面值,便将b直接指向3的地址。这样,就出现了a与b同时均指向3的情况。
特别注意的是,这种字面值的引用与类对象的引用不同。假定两个类对象的引用同时指向一个对象,如果一个对象引用变量修改了这个对象的内部状态,那么另一个对象引用变量也即刻反映出这个变化。相反,通过字面值的引用来修改其值,不会导致另一个指向此字面值的引用的值也跟着改变的情况。如上例,我们定义完a与b的值后,再令a=4;那么,b不会等于4,还是等于3。在编译器内部,遇到a=4;时,它就会重新搜索栈中是否有4的字面值,如果没有,重新开辟地址存放4的值;如果已经有了,则直接将a指向这个地址。因此a值的改变不会影响到b的值。
相关文章推荐
- 递归算法案例分析
- solr5.5教程-solr.home 配置
- HDU 1521 排列组合 指数型母函数
- 1017-R
- Git SVN 区别
- html学习笔记3
- 设计模式之 原型模式(prototype)(C++实现 深拷贝 + 浅拷贝版本[bug])
- 7. Reverse Integer
- Fluent NHibernate and Mysql,SQLite,PostgreSQL
- [BZOJ3050][Usaco2013 Jan]Seating(线段树)
- 忙完之后要仔细看的东西
- C/C++ 调用 Python(实例)
- 如何让你的网站支持https
- 如何快速将idea快捷键转化成Eclipse风格
- IOS UIScrollView——简单示例
- 配置文件(App.config文件)
- 小程序 - 最大递增数
- GitHub&&SourceTree教程
- SPOJ QTREE5 Query on a tree V(边分治)
- linux用户管理