penglongli / blog

18 stars 1 forks source link

Java 方法按值传递 #118

Open penglongli opened 6 years ago

penglongli commented 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 对象的值无修改