• java参数传递


    每次遇到这种问题 本人基本都靠蒙 故特此前来记录

    参数传递分为两种类型:基本类型和对象类型

    1、基本类型传递时,是传递值的拷贝,原值是不会改变的。

    2、对象类型传递时,是把对象在内存中的地址拷贝了一份传给了参数(传址)。


    详情看下面的例子:

    如图可见:基本类型作为参数进行传递时,传递的是值的拷贝,无论你怎么改变这个拷贝,原值是不会改变的。

    再来看当对象作为参数进行传递时的情况:

    此时,arr的值被改变了,有人说 对象作为参数进行传递时,传递的是对象的引用,引用被改变了,对象也被改变了,那么带着这个疑问我们来看下面这个例子

    看到这个例子的结果,你是不是对引用传递产生了疑惑,其实 在对象作为参数的传递过程中 我们可以这样来理解

    StringBuffer arr = new StringBuffer("Hello ");  这行代码执行后,就会在内存堆中生成一个arr对象,如下图所示:

    arr里面存放的是对象地址,当将这个对象作为参数进行传值的时候,就会拷贝一份arr的地址传给函数,该地址同arr一样指向Hello,如下图:

    这样,当你改变strBuf的值的时候 它指向的是Hello ,Hello也就会随之改变。

    但是在Test3中,没有执行 strBuf = new StringBuffer("Hi ");这行代码之前,是跟Test2一样的,但是 strBuf = new StringBuffer("Hi ");这行代码 又重新将strBuf指向了一个新的对象。

    如下图:

     这时候,strBuf指向的是一个新的对象,再对strBuf进行操作,改变的将会是Hi,而不是原来的Hello了。

    所以,当对象类型作为参数传递时,传的是拷贝后的地址。

    下面是又一个例子,如果觉得理解了 就来试一下下面的吧

  • 相关阅读:
    python 装饰器
    git
    JS原生方法实现jQuery的ready()
    js获取css属性方法
    列表页调出点击量
    数组操作
    判断IE版本
    判断IE浏览器用IE条件表达式
    [jQuery] Cannot read property ‘msie’ of undefined错误的解决方法
    复选框字段数组拆分后循环选项值,if判断根据选项值,前端输出html
  • 原文地址:https://www.cnblogs.com/tttty/p/10531384.html
Copyright © 2020-2023  润新知