成员变量作为参数传入方法后进行修改,为什么没有修改成功?

public class Test {

    int a = 1;
    @org.junit.Test
    public void test(){
        change(a);
        System.out.println(a);
    }

    private void change(int a){
        a = 2;
    }
}

打印出的结果仍为1
求详细解释

public class Test {

//我用一下这段代码给你分步解说,static代表静态,你可以忽略,我在这里使用static是为了让main方法调用

//和你同样的成员变量a
static int a=1; 

//和你同样的成员方法
public static void test(){
    //下面调用的方法后,用a变量接受方法的返回值
    a=change(a);
    //输出a的内容
    System.out.println("a的值第二次输出="+a);
}
private static int change(int a){
    //第一次输出a的内容
    System.out.println("a的值第一次输出="+a);
    //给形参a进行赋值
    a=2;
//谁调用,就把a的值返回给谁,不接受a的值就会消失
return a;
}
public static void main(String[] args) {
    //使用main方法进行程序的运行操作
    test();
}

}
//关于你程序的解释结果如下:
//第一:你用change()方法改变的不是你成员变量的参数,
// 在此方法中的a是按值传递的,不是按引用地址传递的,
// 所以a只能当做方法中的局部变量使用,a=2后,
// 方法执行完a也随方法结束而消失了,所以,
// 你的成员变量a的值不会被改变。
//第二:想要改变成员变量a的值,你的明确能区分出来
// 什么时候使用的a是你的成员变量,什么时候是
// 使用的方法内局部的变量
//第三:解决的方式如我所写的代码,需要给赋值的方法增加返回结果
// 这样你在用你的成员变量去接这个结果,它就会改变了
//第四:建议你不明白输出错误出在那里时,就去在每个环节对它进行输出
// 根据结果判断它是在什么环节出现和你意料之外的结果,然后自己分析。

方法内的参数是局部变量,方法外的是成员变量(全局变量),局部变量不影响全局变量,你要是想修改,应该写成下面这样:

public class Test {

    int a = 1;
    @org.junit.Test
    public void test(){
        a = change(a);
        System.out.println(a);
    }

    private int change(int a){
        a = 2;
                return a;
    }
}