Open penglongli opened 6 years ago
Java 是按值传递的。在方法传递的时候,Java 把对象的引用复制了一份进行传递(注意:并不是把对象复制了一份)。如果修改了引用本身,则对原对象无任何影响;如果通过引用修改对象,则原对象会被修改:
public class Test { static class Point { int x; int y; Point(int x, int y) { this.x = x; this.y = y; } } public static void tricky(Point arg1, Point arg2) { arg1.x = 100; arg1.y = 100; Point tmp = arg1; arg2 = tmp; } public static void main(String [] args) { Point pnt1 = new Point(0,0); Point pnt2 = new Point(0,0); System.out.println("X: " + pnt1.x + " Y: " +pnt1.y); System.out.println("X: " + pnt2.x + " Y: " +pnt2.y); System.out.println(); tricky(pnt1,pnt2); System.out.println("X: " + pnt1.x + " Y:" + pnt1.y); System.out.println("X: " + pnt2.x + " Y: " +pnt2.y); } }
在 tricky() 方法中,我们通过 arg1 引用修改了原对象,并修改了 arg2 引用的值。在打印的时候会发现,arg1 对象的值被修改了,但是 arg2 对象的值无修改
Java 是按值传递的。在方法传递的时候,Java 把对象的引用复制了一份进行传递(注意:并不是把对象复制了一份)。如果修改了引用本身,则对原对象无任何影响;如果通过引用修改对象,则原对象会被修改:
在 tricky() 方法中,我们通过 arg1 引用修改了原对象,并修改了 arg2 引用的值。在打印的时候会发现,arg1 对象的值被修改了,但是 arg2 对象的值无修改