package cn.it.test2;
public class Obparm {
public static void main(String[] args) {
Obparm o = new Obparm();
o.amethod();
}
public void amethod(){
int i =99;
Valhold v = new Valhold();
v.i=30;
another( v, i);
System.out.println("amethod---->" + v.i);
}
public void another(Valhold v, int i){
i =0;
v.i=20;//这个赋值会改变amethod方法里的v.i的值,因为变量v的地址是原来的,
Valhold vh = new Valhold();
/**
* 难理解和容易euhui的地方:
* vh是新 new的对象,地址指向和v不一样,把vh赋值给v,相当于这个变量v的地址指向是vh的地址指向了;
* 所以another方法v的值的改变不会影响原来new的v的值,因为此刻的v变量地址指向的是新new的vh的地址;
* 但是amethod方法里的ne的v地址指向是原来的地址,没有人对他的值做改变;
*
* 说明: 区别
* (1)v.i=20;
* (2)Valhold vh = new Valhold(); v=vh;
* ------------------------------------------
* (1)会 改变amethod方法里v.i的值;因为地址指向没有变化;
* (2)步骤2不会改变amethod方法里v.i的值;因为这里变量v的地址已经不再指向Valhold v = new Valhold();了,
* 而是指向 :Valhold vh = new Valhold();
*
*/
v=vh;
System.out.println("another i ---->" +i);
System.out.println("another v.i ---->" + v.i);
}
}
class Valhold{
public int i =10;
@Override
public String toString() {
return "Valhold [i=" + i + "]";
}
}
public class Obparm {
public static void main(String[] args) {
Obparm o = new Obparm();
o.amethod();
}
public void amethod(){
int i =99;
Valhold v = new Valhold();
v.i=30;
another( v, i);
System.out.println("amethod---->" + v.i);
}
public void another(Valhold v, int i){
i =0;
v.i=20;//这个赋值会改变amethod方法里的v.i的值,因为变量v的地址是原来的,
Valhold vh = new Valhold();
/**
* 难理解和容易euhui的地方:
* vh是新 new的对象,地址指向和v不一样,把vh赋值给v,相当于这个变量v的地址指向是vh的地址指向了;
* 所以another方法v的值的改变不会影响原来new的v的值,因为此刻的v变量地址指向的是新new的vh的地址;
* 但是amethod方法里的ne的v地址指向是原来的地址,没有人对他的值做改变;
*
* 说明: 区别
* (1)v.i=20;
* (2)Valhold vh = new Valhold(); v=vh;
* ------------------------------------------
* (1)会 改变amethod方法里v.i的值;因为地址指向没有变化;
* (2)步骤2不会改变amethod方法里v.i的值;因为这里变量v的地址已经不再指向Valhold v = new Valhold();了,
* 而是指向 :Valhold vh = new Valhold();
*
*/
v=vh;
System.out.println("another i ---->" +i);
System.out.println("another v.i ---->" + v.i);
}
}
class Valhold{
public int i =10;
@Override
public String toString() {
return "Valhold [i=" + i + "]";
}
//--------------------------------------------------------------------------------------------------运行结果
another i ---->0
another v.i ---->10
amethod---->20 //-------------------------------这块的值是本文的重点
}