Java从内部类访问本地数组

Java从内部类访问本地数组,java,inner-classes,Java,Inner Classes,我知道,如果变量不是final,就不能编辑内部类中的局部变量。但为什么我可以从一个内部类更改数组,即使它不是最终的 public void test(String s) { int a[] = {1}; IntStream.range(0, s.length() / 2).forEach(i -> a[0] = 2); } 若a是一个数组,若我编辑它,编译器不会抱怨。但是如果a是一个整数,我不能在内部类中对其进行更改。这在Java中是一个有用的技巧,因为

我知道,如果变量不是final,就不能编辑内部类中的局部变量。但为什么我可以从一个内部类更改数组,即使它不是最终的

 public void test(String s) {
        int a[] = {1};
        IntStream.range(0, s.length() / 2).forEach(i -> a[0] = 2);
}

a是一个数组,若我编辑它,编译器不会抱怨。但是如果a是一个整数,我不能在内部类中对其进行更改。

这在Java中是一个有用的技巧,因为您使用的数组(对象)永远不会被重新赋值。可以对对象的属性执行相同的操作。 如果您更改了对象的属性,您仍然不会重新分配对象,并且它将保持“有效的最终”。 参考:


旁注:最好以“int[]A”的形式编写数组,因为它们更具可读性。

完整消息显示“final或effectivefinal”。这意味着您可以访问局部变量,如果它从未被重新分配。但我肯定会重新分配它。在我的代码中,我多次重新分配[0]。但您访问的变量是数组,它从未被重新分配。为了理解这一概念,我建议阅读@tibetiroka,对于新手来说,完整的语言规范可能有些过分。数组本身和数组内容之间的区别要基本得多。