java - 通过引用模糊调用

mhs*_*edi 1 java pass-by-reference

我熟悉java中的引用概念,但看到这段代码后我很困惑

public class App 
{
    public static void main( String[] args )
    {
        Test t1 = new Test(1);
        Test t2 = new Test(8);
        App.doSomething(t1, t2);
        System.out.print(t1.a);
        System.out.print(t2.a);
    }
    public static void doSomething(Test t1, Test t2){
        System.out.print(t1.a++);
        System.out.print(t2.a++);
        t1 = new Test(999);
        t2 = new Test(888);
    }
}
Run Code Online (Sandbox Code Playgroud)

打印:

1
8
2
9
Run Code Online (Sandbox Code Playgroud)

为什么主函数中"t1.a"和"t1.b"的值不变为888和999?

Jac*_*son 5

Java没有引用调用.所有参数都按值传递 - 但在参数为对象的情况下,传递的"值"是对象的引用.

因此,如果在方法中使用对该对象的本地引用来修改对象,则它将修改同一对象.但是,如果为该局部变量赋值,则它不再具有对原始对象的引用,并且后续更改不会影响原始对象.