public class ParamExam {
public void changePoint(Point point)
{
point.x = 5;
point.y = 6;
}
public static void main(String[] args)
{
Point point = new Point(1,2);
ParamExam pe = new ParamExam();
pe.changePoint(point);
// 问题,打印结果是什么,说明原因
System.out.println(point.x);
System.out.println(point.y);
/**
* 在java中,对于方法的参数传递,不管是原生数据类型还是引用数据类型, 一律是传值(pass by value)
*当执行到pe.changePoint(point)这行时,在main方法中的point是一个Java对象,即引用
*接着point 传递到changePoint方法,changePoint方法参数本身是一个point对象,由于第9行代码中point是从main方法中传过来的,
*传过来的是一个Java对象,也就是引用,两个对象指向同一个引用
*在Java中,两个对象指向同一个引用,只要一个对象引用改变(就是内存地址改变),另外一个也将改变,
*因此,在changePoint方法里,point.x,y值已改变,在changePoint方法外,那个point也将跟着改变属性值
*结果为5,6
*/
}
}
class Point
{
int x;
int y;
public Point(int x,int y)
{
this.x = x;
this.y = y;
}
}
---------------------------------------------------------------------
又一个示例,这个是演示String 参数传递
public class ParamExam2 {
public void changeString(String str) { str = "abc"; }
public static void main(String[] args)
{
String str = "xyz";
ParamExam2 pe = new ParamExam2();
pe.changeString(str);
System.out.println(str);
}
}
// 打印结果为 xyz