jiazz213453 2017-03-11 23:40 采纳率: 12.5%
浏览 763
已采纳

请问大神,关于参数传递的问题

参数传递分两种,按值传递和按址传递,为啥会出现两种不同的参数传递?其中其中参数怎么变化的?

  • 写回答

3条回答 默认 最新

  • charm_of_code 2017-03-12 02:33
    关注

    java中的确都是按值传递,可以通过下面的图理解,A是实参,B是函数参数,
    当参数类型是int这样的基本数据类型的时候,比如实参是int A=1,那么函数参数B的值也是1,但是他们在栈里边的地址是不一样的,这也就是
    为什么在函数体内对B进行一系列操作,对A的值没有影响的原因。当实参是引用的时候,同样也是传值,传的是引用值。也就是说A的值指向对象(这里说指向不是很合适,毕竟不是指针),
    那么B的值是等于A的引用值,同样B指向了与A指向的同一个对象,同理A与B在栈中的地址是不一样的,但是他们的值是相同的,当B对堆中的对象
    进行操作后,堆对象的属性就会改变,当A读取堆对象的时候,自然发现属性已经改变了。

    其实要注意的一点就是,对基本数据类型的操作是在栈内的,而对于对象是在堆内操作。(图画得不是很好,还请见谅)

    图片说明

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器