final修饰的变量不是一经赋值就不能改变吗?为什么输出结果却是多个?
final修饰的变量确实是一经赋值就不能再次改变了。但是,如果使用final修饰一个数组或者集合,那么虽然数组或者集合本身不能改变,但是数组或者集合中的元素是可以改变的。因此,虽然数组或者集合是final的,但是数组或者集合中的元素是可以修改的,这也是为什么在输出结果时会有多个的原因。
例如,下面的代码中定义了一个final的List集合,虽然该集合本身不能再次赋值,但是集合中的元素是可以修改的:
java
Copy code
final List list = new ArrayList<>();
list.add("hello");
list.add("world");
list.add("!");
list.set(1, "everyone");
System.out.println(list);
输出结果为:[hello, everyone, !]
可以看到,虽然List集合是final的,但是集合中的元素可以通过set方法进行修改,因此输出结果中有多个元素。
需要注意的是,如果使用final修饰一个基本类型的变量,那么该变量的值确实是一经赋值就不能再次改变了,例如:
java
Copy code
final int num = 10;
num = 20; // 编译错误,final变量不能再次赋值
这样的代码会在编译时就报错,因为final修饰的变量是常量,一经赋值就不能改变。