java中的final关键字允许更改方法

Bob*_*ent 2 java

我正在玩一些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);
    }  
}
Run Code Online (Sandbox Code Playgroud)

即使num被声明为static而且最终我能够在操作方法中更改其值.只是寻找一些澄清,因为我不认为我能够改变这一点.

rge*_*man 8

你没有改变static final num变量; 您正在改变它的本地副本中manipulatenum参数局部变量.打印num回来时main,它仍然是5.


Joh*_*n B 6

您正在操作方法参数,而不是静态字段.参数是hiding静态字段.