final 修饰引用型变量
时间: 2023-08-14 11:51:57 浏览: 45
final修饰引用型变量时,表示该变量的引用不可改变,即不能再指向其他对象。但是,被引用的对象本身是可以改变的。例如:
```java
final List<String> list = new ArrayList<>();
list.add("Hello");
list.add("World");
System.out.println(list); // 输出: [Hello, World]
list = new ArrayList<>(); // 错误,final变量不能重新赋值
list.add("Java"); // 正确,可以通过引用修改对象
System.out.println(list); // 输出: [Hello, World, Java]
```
在上述例子中,final修饰的变量`list`不能再指向其他List对象,但是我们可以通过该引用修改List对象本身的内容。
相关问题
final修饰引用变量
在 Java 中,final 修饰的引用变量表示的是该引用变量所指向的对象不能被重新赋值。也就是说,final 修饰的引用变量仍然可以改变其所指向的对象的内部状态,但不能改变其指向的对象。
例如:
```java
final List<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
```
在上面的代码中,我们声明了一个 final 修饰的 List 引用变量 list,并将其初始化为一个 ArrayList 对象。虽然 list 引用变量不能被重新赋值,但我们仍然可以通过 list 引用变量调用其所指向的 ArrayList 对象的方法,修改其内部状态,例如添加元素。
但是,下面的代码是不合法的:
```java
final List<String> list = new ArrayList<>();
list = new LinkedList<>(); // 编译错误
```
在上面的代码中,我们试图将 final 修饰的 list 引用变量重新赋值为一个新的 LinkedList 对象,但是这是不合法的,因为 final 修饰的引用变量一旦被初始化后就不能被重新赋值。
final 修饰变量
在Java中,使用final关键字修饰变量可以将该变量设置为常量,即一旦初始化后,其值不能被修改。final变量必须在声明时或构造函数中进行初始化,并且不能再被赋值。
final变量可以是基本数据类型、对象引用类型或者类成员变量。如果final修饰的是类成员变量,则必须在静态初始化块中或者类的构造方法中进行初始化。final变量一旦被初始化,其值就不能再被修改,因此它具有线程安全性以及代码可读性。
以下是final变量的示例:
```java
final int MAX_VALUE = 100; // 常量MAX_VALUE
final String NAME = "John"; // 字符串常量NAME
final Person person = new Person(); // 引用类型,需要在构造函数中初始化
person.setName("Jack"); // 可以修改person对象的属性
person = new Person(); // 报错,final变量不能重新赋值
```