class ValHold{
public int i=10;
}public class Obparm{
public static void main(String[] args){
Obparm o =new Obparm();
o.amethod();
}
public void amethod (){
int i=99;
int b= 0;
ValHold v =new ValHold();
System.out.println(v.i);//10
System.out.println(i); //99
v.i=30;
b=v.i;
another(v,b);
System.out.println(v.i);
}//End of amethod
public void another(ValHold v,int i){
i=0;
v.i=20;
ValHold vh =new ValHold();
v = vh;
System.out.println(v.i);
}//End of another
}
/*正确答案:
10
99
10
20
请问为什么不是
10
99
10
30
*/
解决方案 »
- protected 修饰符!
- 问个验证IP地址加端口号的正则表达式
- pack200.exe压缩后的JAR文件如何用呀?似乎压缩后的文件后辍名一定得是.gz,可这个文件能直接像原来的JAR文件一样使用吗?
- FCKeditor插入图片的对话框是空的
- 如何根据当前日期取得当前周的周一和周日
- 为什么一个.java文件里面只能有一个public?
- 一个关于Eclipse的问题
- 求助一个关于JMF的问题。。。
- SmartUpload不能上传中文文件名的文件是怎么回事?
- java 线程问题,关于使用开始和暂停按钮实现读取并显示大量数据
- 怎么将mdb格式的文件内容导到oracle中?
- 知道了答案可不知怎么得来的,哪位可以帮忙解释一下吗?谢谢!
public void another(ValHold v,int i){
i=0;
v.i=20;
ValHold vh =new ValHold();
v = vh;
System.out.println(v.i); }
another函数中的v首先指向主函数中的V,然后v.i被改为20,最后another函数中的v又指向vh,此时主函数中的v.i已经被改为了20
好好理解下,理解透了就理解了传值和传引用了
本人觉得java中都是传值,不存在传引用,那样会更好理解一些东西
public void another(ValHold v,int i)
{
i=0;
v.i=20;
ValHold vh =new ValHold();
v = vh;
System.out.println(v.i);
}
v.i已经是20了,没有改变,所以最后打印出的是20
这只是考查了一个引用关系
public void another(ValHold v,int i){
i=0;
v.i=20;
//到此时,这里的v与amethod中的v指向同一个对象,因此v.i = 20改变了该对象的i,也就是说amethod中的v.i已经变为20,而不是30了。
ValHold vh =new ValHold();
v = vh;
//现在,v与amethod中的v指向了不同的ValHold对象,这里的v.i = 10, 而amethod中的v.i仍为20 System.out.println(v.i);
}//End of another所以打印出的自然就是
10
90
10
20