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

时间:2014-10-28 18:23:05

标签: 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);
    }  
}

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

3 个答案:

答案 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传递值,您传递的第一个数字不会被更改。