zoukankan      html  css  js  c++  java
  • Java的参数传递是值传递?

    引用传递和值传递的区别。(不先说定义的都是在耍流氓!)

    按值调用(call by value) : 在参数传递过程中,形参和实参占用了两个完全不同的内存空间。形参所存储的内容是实参存储内容的一份拷贝。

    按引用调用:在参数传递的过程中,形参和实参完全是同一块内存空间,两者不分彼此。

    咱们先看俩行代码:

    如图,int是基本类型,66直接保存在变量count中。而对于引用类型来说,变量存的是实例对象的地址,如上图也画的0x10一样,它指向实例对象。一般称这种变量为"引用"。对于我们的String str = "MDove"来说,str就是这个引用,这个引用指向了"MDove"。

    赋值符号对于基本类型和引用类型的不同之处。再看一段代码:

    由上图,我们可以看出,对于基本类型来说,count = 666;是直接进行赋值。而str = "MDove is cool.";则是重新开辟了一块空间,然后将这块空间的地址赋值给str变量(引用)。

    基本类型就是值传递,比如这样的:

     

    因为是值传递,所以在fun(int coount)中,count只是真正变量的拷贝,因此count = 666;也是对拷贝进行赋值,因此执行完了fun方法,我们的count还是等于66。

    那我们在换一个例子,把基本类型改为引用类型:

    答案还是"MDove"(如果感觉有点懵,可以把前后的两个对象取出来 equal比较一下)

    按我的理解方法参数都是引用类型了,那应该是引用传递,内部str赋值应该会影响外边才对啊!

    其实上面这个例子也恰恰应征了这个问题,引用类型同样也是值传递。因此fun参数的str,依然是一个拷贝,因此此时的赋值对面来说没有任何意义。其中,IDE也帮我们证实了这个问题,让我们看一张截图:

    如果是这种写法,就改变了变量的值了:

    MDove:这样当然能改变值,对于引用变量来说,值传递,拷贝了它的引用,但是它的这份拷贝的引用所指向的真实地址是没变的。上述的操作画成图是这个样子:

     

    所以 java是值传递,如果我解释的不清楚  请点击http://blog.sina.com.cn/s/blog_4b622a8e0100c1bo.html

     

     

  • 相关阅读:
    React生命周期, 兄弟组件之间通信
    React组件式编程Demo-用户的增删改查
    React之this.refs, 实现数据双向绑定
    CCF CSP 201812-4 数据中心
    CCF CSP 201812-4 数据中心
    PAT 顶级 1020 Delete At Most Two Characters (35 分)
    PAT 顶级 1020 Delete At Most Two Characters (35 分)
    Codeforces 1245C Constanze's Machine
    Codeforces 1245C Constanze's Machine
    CCF CSP 201712-4 行车路线
  • 原文地址:https://www.cnblogs.com/smellpawn/p/10797286.html
Copyright © 2011-2022 走看看