blog
blog copied to clipboard
Java 方法按值传递
trafficstars
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 对象的值无修改