class ValHold{
public int i = 10;
}
public class ObParm{
public static void main(String argv[]){
ObParm o = new ObParm();
o.amethod();
}
public void amethod(){
int i = 99;
ValHold v = new ValHold();
v.i=30;
another(v,i);
System.out.print( v.i );
}
public void another(ValHold v, int i){
i=0;
v.i = 20;
ValHold vh = new ValHold();
v = vh;
System.out.print(v.i);
System.out.print(i);
}
}大案是:10020.请问为什么不是10030?在amethod()中的“v.i”为什么会变化?
解决方案 »
- 关于java import的一点疑问
- 二叉树问题
- 如何把字符串转换为浮点型?
- [问题]Cannot find symbol
- 关于编码转化问题
- TopoSearch.java
- 请问你能给我一份关于j2sdk1.4.1每个目录以及每个文件的说明资料吗?!
- 在 Jbuilder5 下能够使用 Jdk1.4 吗?
- 各位请帮忙啊!下面的程序为什么老是出现"符号:类 AbstractTableModel 位置:类 in Demo TableModel tm=new AbstractTableModel()"的错误啊
- Thread sleep 与GC的关系
- 请高手指点:用JAVA开发关于运用JDBC的程序?
- 请问怎么样将URL后面的参数隐藏传递?
i=0;
v.i = 20;
ValHold vh = new ValHold();
v = vh;
System.out.print(v.i);
System.out.print(i);
}
}
这里的参数v,接受了another(v,i);里的的v传过来的地址。
而在another 方法里有句v.i = 20; 这句话改变了another(v,i);里的的v传过来的地址,下的v.i的内容。总结:对象是地址传递,换句话说是也叫引用
i=0;
v.i = 20; //此句修改了代入参数v中的域i的值。
ValHold vh = new ValHold();
v = vh;
System.out.print(v.i);
System.out.print(i);
}
int i = 99;
ValHold v = new ValHold();
v.i=30;
another(v,i);
System.out.print( v.i ); // 这里是第三个输出:20,为什么?见下面的注释2。注释2下面的赋值语句执行后,那里的“v”已经跟这里的v没有关系了。
}
public void another(ValHold v, int i){
i=0; // 1、就是这里啦,赋值为0!!!!
v.i = 20; // 2、这里赋值为20!!!!
ValHold vh = new ValHold();
v = vh;
System.out.print(v.i); // 这里是第一个输出:10,因为这里的v是新生成的,所以他的i被初始化为10
System.out.print(i); // 这里是第二个输出:0,因为上面备赋值为0,见上面的注释1
}
public void another(ValHold v, int i){
i=0;
v.i = 20;
ValHold vh = new ValHold();
v = vh;
System.out.print(v.i);
System.out.print(i);
}