值传递和引用传递问题

Scaarf 2018-04-24 10:35:57
我对java中的值传递和引用传递的理解是这样的:

假如我现在有个方法public void a(类型 m){...};

如果m是基本数据类型的话,比如int
我现在将实际参数n=54;传给这a这个方法,m=54,这个54应该是n=54副本,之后m的变化不会影响n,n的变化也不会影响m。

如果m引用数据类型的话,比如Person类,里面有name字段。
我现在将实际参数n=new Person(“张三”);传给这a这个方法,那么m和n指向的是同一个实例,这实如果我通过m.setName(“李四”)
更改了name字段的值,结果n.name会从原来的的张三变为李四。

可是看数据结构java语言版时,里面介绍二叉查找树的这么说


我觉得我又糊涂了
...全文
221 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Scaarf 2018-04-24
  • 打赏
  • 举报
回复
引用 2 楼 maradona1984 的回复:
书说的场景是你理解的第一种情况,并非基础类型才是值传递,所有参数都是值传递,只是基础类型的值等于参数,对象参数传递的是指向对象的地址 在方法内对形参赋值操作就是改变形参地址的动作,但形参仅仅是地址的副本,所以改变形参地址并不会改变传入参数的指向的地址,这个跟基础类型是一样的 你说的引用传递是第二种,实际上你修改的是对象中的变量,而非对象指向的地址,跟值传递是两码事
懂了,书上这个好像和我理解的不矛盾,我没有结合她后面那句话看。。。。t和root两个都指向了根节点,书上只是改变了t的指向,root还是指向根节点。。。。。。片面了,没结合后文。。。。。。。
maradona1984 2018-04-24
  • 打赏
  • 举报
回复
书说的场景是你理解的第一种情况,并非基础类型才是值传递,所有参数都是值传递,只是基础类型的值等于参数,对象参数传递的是指向对象的地址 在方法内对形参赋值操作就是改变形参地址的动作,但形参仅仅是地址的副本,所以改变形参地址并不会改变传入参数的指向的地址,这个跟基础类型是一样的 你说的引用传递是第二种,实际上你修改的是对象中的变量,而非对象指向的地址,跟值传递是两码事
oyljerry 2018-04-24
  • 打赏
  • 举报
回复
java里参数都是值,只不过这个参数本身可能是一个引用,所以引用的值还是可以修改所引用对象的数据

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧