有谁会这题??? 怎么又问呀 呵呵~~ another 是传引用的 形参和实参v都是指向一个对象 所以在another中 v.i=20修改了实参的对象 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 子程序传递参数有两种方式:按值调用和句柄调用。根据传递对象的不同,java分别使用这两种方式:当传递简单类型时,是按值传递的。这时跟c中的实参和形参是一个概念,对形参的改变并不影响实参,例如本题中another()的形参int i。而对于对象,是按句柄传递的,当把句柄传递给自变量时,自变量与该参数就指向同一个对象,在该方法中对对象的改变将影响作为参数的对象。 当然是20啦,怎么会是10呢,哈,在调用another方法的时候,你传的第一个参数是对象啊,another中的v和amethod中的v此时指向同一个区域,所以在another中修改了v.i的值,another中的v自然也变了啊,30自然变成20了啊!记住:java中只有值传递,想要改变某个值,只能通过传递对象来实现. 可能是我没有表达清除我的疑点。java什么时候按值传递,什么时候引用传递我是清除的。这里我的疑点在于返回amethod()后照理说v.i应该是在another()中修改好的值,即v.i=10,而实际则是20。 java 总是传值。但是java的数据类型分为原始类型和引用类型像类、接口、数组都是引用类型所以它们本身就是引用。 这是个很不错的问题啊!我在考SCJP时,就遇到这样类似的问题.楼上的各位所得都不错.好好看看因为another()方法中所修改的是局部变量的值,返回后自然就没有了--如果这个还不明白,查看一下书,看看局部变量和方法变量在内存中的存放形式.怎么索引局部变量,然后,你就可以明白了----真正的明白了!!another()中得值只在another(){}内有效----它所修改的值相当于v.i的一个复制的值,而不是v.i本身!! to azhiking(雪域浪人) : 你可以把如下两行注释掉,看看结果和你想的是否一致 ValHold vh = new ValHold(); v = vh;这道题重点考的就是这两行......... 关键在于java中对于对象所谓的引用调用其实是拷贝了对象的地址,也就是说: 当在amethod方法中new了一个ValHold类的实例(v)时,系统在内存中分配了一块地址给v,设地址为a,在调用another前,a地址所指的对象v的i=30,调用another时,系统拷贝了地址a,设为b,即a,b都指向对象v,即是说在another中访问对象v是通过b,接下来v.i=20,即通过b访问到v,把i的值改为20,此时v.i=20,关键在于ValHold vh =new ValHold(),和v=vh,前者新分配了一个对象vh,他的i值为10,内存中地址为c;v=vh等价于b=c,就是把原本指向对象v的地址b的值改为对象vh的地址,此时b不指向v,而指向vh,此时v.i=20,vh.i=10。下一句输出v.i其实是输出此时vh.i,等于10,然后返回到amethod,输出v.i其实是输出此时v.i,等于20。 关于事件监听器的问题 小小的聊天室程序`连接异常 xml遍历问题,死循环,大家帮忙看看这个方法什么问题 初学者 java异常问题 二维数组问题 请教JDBC连接DB2的问题!!!!!!! 请问学习java入门后,该学些什么,看那些书?谢谢!! 有关解压有密码的zip文件的问题 各位大虾现欲用java开发一套网上投票表决系统 应该看什么书?用什么开发工具?(一定给分!) 产生随机数 random 我用jbuilder做了webapp,在tomcat里怎样部署?有哪些设置? 我下载了一个media包,不知道怎么放入JDK中才能用,请各位指教,50分。
当传递简单类型时,是按值传递的。这时跟c中的实参和形参是一个概念,对形参的改变并不影响实参,例如本题中another()的形参int i。
而对于对象,是按句柄传递的,当把句柄传递给自变量时,自变量与该参数就指向同一个对象,在该方法中对对象的改变将影响作为参数的对象。
我在考SCJP时,就遇到这样类似的问题.楼上的各位所得都不错.好好看看
因为another()方法中所修改的是局部变量的值,返回后自然就没有了--如果这个还不明白,查看一下书,看看局部变量和方法变量在内存中的存放形式.怎么索引局部变量,然后,你就可以明白了----真正的明白了!!
another()中得值只在another(){}内有效----它所修改的值相当于v.i的一个复制
的值,而不是v.i本身!!
你可以把如下两行注释掉,看看结果和你想的是否一致
ValHold vh = new ValHold();
v = vh;这道题重点考的就是这两行.........
也就是说:
当在amethod方法中new了一个ValHold类的实例(v)时,
系统在内存中分配了一块地址给v,设地址为a,
在调用another前,a地址所指的对象v的i=30,
调用another时,系统拷贝了地址a,设为b,即a,b都
指向对象v,即是说在another中访问对象v是通过b,
接下来v.i=20,即通过b访问到v,把i的值改为20,此时v.i=20,
关键在于ValHold vh =new ValHold(),
和v=vh,前者新分配了一个对象vh,他的i值为10,
内存中地址为c;v=vh等价于b=c,就是把原本指向
对象v的地址b的值改为对象vh的地址,
此时b不指向v,而指向vh,此时v.i=20,vh.i=10。
下一句输出v.i其实是输出此时vh.i,等于10,
然后返回到amethod,输出v.i其实是输出此时v.i,
等于20。