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 {
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是你的成员变量,什么时候是
// 使用的方法内局部的变量
//第三:解决的方式如我所写的代码,需要给赋值的方法增加返回结果
// 这样你在用你的成员变量去接这个结果,它就会改变了
//第四:建议你不明白输出错误出在那里时,就去在每个环节对它进行输出
// 根据结果判断它是在什么环节出现和你意料之外的结果,然后自己分析。