`
ku_sunny
  • 浏览: 37307 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java 参数 内存 传递透析

阅读更多

    在介绍之前我不得不说点事情,本人现在从事Java开发也一年有余,这一年来我翻过thinking Java也有十来遍了,但是每次翻阅总有不同体会,记得刚学Java两个月的时候,这本书对我来说纯粹就是催眠,但是就是不懂培训老师一直在给我推荐这本书。现在才发现到这本书确实是本很好很好的书,你阅读就会发现越多,而且你同样会发现在你不同的阶段都,领悟到的也会不一样。

    于是乎,今天我花了四个多小时才看完七八页,但我还是觉得回味无穷……

    首先要理解, java里为什么会有值传递,其实java里应该只有引用传递,全部都应该是引用传递。 再理解传递之前,得知道引用放在何处,对象又放在何处。堆栈里面放引用,堆里的空间放对象,但是如果是简单类型由于保存的只有值,可理解没有引用这说法,较特殊 他的值是存在于堆栈中的。

    但是java里又保留了基本数据类型,比如int什么的,java所有的数据对象都保存在堆里面,程序里用的都是对这些对象的一个引用。而基本数据类型的数据都保存在栈里面,和c语言比较类似。所以在所谓的值传递的时候,是把栈里面的值推出去了(所谓的复制)给其他方法用,无论其他方法对该值做何操作,栈里的原值都不会改变。 而引用传递的时候,程序将一个对象的引用传递给其他方法,在这里不得不说是虽然说是引用传递但真正传递的还是值,但是这里的值是代表对象的映射地址,所以当你复制一个引用后,操作的时候实际上操作的是同一个对象。 这就如同大家是如何理解虚虚实实。 下面有随手画的,希望有助于理解。对于图像我务必的辩证一个事实,很多人画对栈和堆 都是分开的,这样其实是不正确的,容易误导。其实所谓的堆栈,从名字也不难看出,堆栈本身就是从堆里开发出的栈,所以应该是包含关系才对。

     如果能理解图的意思,相信以后碰到的大部分关于参数传递以及内存放置 都能给大家或多或少的帮助

  • 大小: 3.7 KB
  • 大小: 4.1 KB
  • 大小: 5.7 KB
1
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics