public class Sales {
public static void main(String[] args){
Sales sl=new Sales();
sl.amethod();
System.out.println();
}
public void amethod(){
int i=99;
V v=new V();
v.i=30;
another(v,i);
System.out.println(v.i);
}
public void another(V v,int i){
i=0;
v.i=20;
V v2=new V();
v=v2;
System.out.println(v.i);
System.out.println(i);
}
}为什么输出是10 0 20呢?
为什么在main函数里面输出v.i是20?v不是在another里面被修改为指向v2了吗?java
比如:
……
public void another(V v,int i){
i=0;
v.i=20;
V v2=new V();
v=v2;
System.out.println(v.i);
System.out.println(i);
}
……上面这段 参数v 与i 传过来 都是引用值
修改方法体中的v的值 不会影响原v的值。
Sales sl=new Sales();
sl.amethod();
Sales s2=new Sales();
s2.amethod1();
}
public void amethod(){
int i=99;
V v=new V();
v.i=30;
another(v,i);
System.out.println(v);
System.out.println(v.i);
}
public void another(V v,int i){
i=0;
v.i=20;
V v2=new V();
v=v2;
System.out.println(v);
System.out.println(v2);
System.out.println(v.i);
System.out.println(i);
}运行结果:
dao04.V@16caf43
dao04.V@16caf43
10
0
dao04.V@66848c
20形参的问题, public void another(V v,int i)中的v是局部变量,你并没有将值赋给v
如果你这样:
main中:v=another(v,i); public V another(V v,int i){
i=0;
v.i=20;
V v2=new V();
v=v2;
return v;
}
那么结果就是:10 0 10
因为你在 main方法里 用v = another(v,i); 接收了返回值嘛。