java中方法参数传递方式是按值传递。所谓值传递,就是将实际参数值的副本(复制品)传入方法内,而自己本身不会受到任何影响。
如果参数是基本类型,传递的是基本类型的字面量值的拷贝。
如果参数是引用类型,传递的是该参量所引用的对象在堆中地址值的拷贝。
结果是(p1[0,0], p2[5,5])就对了, 下图是执行流程以及内存变化
记住: 当对象的引用被执行赋值操作(=)后, 讲不在指向原来的对象(新的对象不是原来的对象)
// modify方法做如下修改就知道为什么是那样的结果了:private static void modify(Point p1,Point p2){
System.out.println(p2) // 注意观察hashcode值, 不要重写toString()方法
Point p = p1
p1 = p2
p2 = p
p1.setLocation(5, 5)
p2 = new Point(5, 5)
System.out.println(p2) // 这里p2与之前的p2的hashcode值已经不是同一份
}
// 修改main方法如下
public static void main(String[] args)
{
Point p1 = new Point(0,0)
Point p2 = new Point(0,0)
System.out.println(p2)
modify(p1, p2)
System.out.println(p2) // modify执行完成后, p2的指向并未改变
System.out.println(p1.getX()+","+p1.getY()+","+p2.getX()+","+p2.getY())
}
/**
* 可以使用断点调试观察modify方法中p2的指向变化
* Eclipse中引用被赋予新的值时, 调试界面中[变量列表]的变化为 黄色高亮显示
*/
希望对你有帮助!