我是编程和Java的新手,我对同一类方法中全局变量的行为感到困惑.在我正在学习的课程提供的练习题中,我被问到执行后变量b的值是多少inc(b).
int b;
int inc(int b){
b++;
return b;
}
b = 5;
inc(b);
Run Code Online (Sandbox Code Playgroud)
答案是5而不是6,我理解这是因为Java是按值传递的,并且方法中的所有参数inc都被遗忘了.
另一方面,在java类中,建议为所有实例变量编写set和get方法.那么我的问题是,为什么setter能够更改实例变量并将其值保持在setter之外?换句话说,为什么变量在上面的例子中被"遗忘"了,但在set方法中"记住"了?
public void setName ( String n ) {
name = n;
}
Run Code Online (Sandbox Code Playgroud)
换句话说,为什么变量在上面的例子中被"遗忘"了,但在set方法中"记住"了?
在您的inc方法中,您根本不会更改被调用的字段b.你有一个名为的参数b,所以每次代码b在方法中引用时,都会引用参数而不是字段.这称为阴影.如果您将其更改为:
int b;
int inc(int b) {
this.b++;
return this.b;
}
Run Code Online (Sandbox Code Playgroud)
...然后该参数将被忽略,它将增加该字段.
基本上,您需要考虑您希望该inc方法执行的操作: