我正在玩一些java来更好地感受范围。我写了下面这段代码:
public class Scope {
static int [] arr = { 10 };
static final int num = 5;
public static void manipulate(int[] arr, int num) {
num = arr[0] + 10;
arr[0] = num;
}
public static void main(String [] args) {
manipulate(arr, num);
System.out.println("arr[0] = "+ arr[0]);
System.out.println("num = "+num);
}
}
即使num被声明为static而且最终我能够在操作方法中更改其值。只是在寻找一些澄清,因为我认为我不能改变它。
答案 0 :(得分:8)
您没有更改static final
num
变量;您正在manipulate
的{{1}}参数局部变量中更改它的本地副本。当您将num
打印回num
时,它仍然是main
。
答案 1 :(得分:6)
您正在操纵方法参数,而不是静态字段。参数是hiding
静态字段。
答案 2 :(得分:4)
您的代码中有两个num定义。 首先是,这一个从未改变
static final int num = 5;
第二个是:你的代码改变了第二个
public static void manipulate(int[] arr, int num)
您正在将第一个传递给第二个数字,由Java传递值,您传递的第一个数字不会被更改。