java引用传递使用情况...求解析

为什么输出的结果是A,不是B呢?知道t 的前后值没变...

图片说明图片说明

10个回答

肯定是A啊,你的B虽然传过去了。但用的还是TestField里面定义的desc,你传过去的形参没用的。这些都是些定死了的东西。找本书看看理论就好了,书上一条一列写的很清楚的。看一遍,记一遍,实践几遍,保管这种问题你以后就不需要问了!而且引用传递的资料网上资多的是啊!多问问度娘!这种问题完全可以自己解决的。做了程序员就要多动手动脑图片说明望采纳!

因为你的modify方法内部,new了一个tf对象,然后把B赋值给了方法体内new出的tf对象,然而你想打印的是你main方法内new出的t对象的属性,那当然还是A了

因为你调用的是t对象的desc?B的值在tf里 要打印B应该是final tf后 tf.getDescrition()调用吧

modifyDesf(t,"B"),这句话等于没写;因为这个方法中又重新new了一个对象,这个方法中的tf对象和你要打印的对象的值没有太大关系;对象是引用传递,没有值传递的;

图片说明
在Main方法中,创建了一个TestField对象,假设,对象存放的地址是右边的序号1,而局部变量tf的地址是左边的序号1,而且它存放的是右边对象
的地址1,也就是常说的对象引用。而在方法传递的时候,就是把这个地址值传递到方法中,所说的引用传递其实是值传递,只传递的这个值正好有另外一个名字——对象引用。
当执行modifyDesc时,实际上是将tf的值传递给另一个局部变量,而这个局变量假设指向左边序号的位置,存放的值是对象A的地址,即指向右边序号1
位置,如果你代码中不创建新对象,而直接执行setDescription("B")的话,打印结果肯定是B,但你重新创建了一个对象,而且把这个对象的地址赋值给了tf。那么tf指向位置所存放的值就是3了,序号3指向了新创建的对象,此时你再setDescription("B")的话,就与之前创建的对象没有关系了。
不知道你现在有没有一些了解,引用传递的含义。

dream_lixiang
dream_lixiang 赞同
大约 4 年之前 回复

简单来说就是你传进的东西没传出来。

其实很简单:你调用的都是对象t下的方法,t.setDescription("A");
得到 desc = A ;
然后你输出里调用了t.getDescription();
肯定输出的是A;
中间代码块:modifyDescription(t,"B");你是将对象t作为作为引用参数传给了这个方法,然后又new出了一个新对象,不是同一个对象set的值不同,在本部分你set的值是B,但你没有在外面输出,肯定是有问题的。

你现在的问题和我当初新手时一样:没搞清内存调用分配的问题。

因为你midifyDesc又new了一个新的对象

你创建了两个对象,各是各的值,你把desc改成静态(static)就是b了。

你每次创建新对象,当然原来的不变

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问