首页 > 解决方案 > Java从内部类访问本地数组

问题描述

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

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

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

标签: javainner-classes

解决方案


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

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


推荐阅读