final修饰引用变量
时间: 2023-09-02 22:12:23 浏览: 96
在 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 修饰引用型变量
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对象本身的内容。
static、static final、final修饰的变量的区别
`static`、`static final`和`final`是Java中用于修饰变量的关键字,它们有以下区别:
1. `static`:用于创建静态变量。静态变量属于类,而不是实例化对象。它在类加载时就会被初始化,并且所有该类的实例共享相同的静态变量。可以通过类名直接访问静态变量。
2. `final`:用于声明一个常量,即值不能被修改的变量。`final`修饰的变量只能被赋值一次,并且在声明时或构造函数中赋值。一旦赋值后,其值就不能再改变。
3. `static final`:用于声明一个静态常量。静态常量是类级别的常量,它在类加载时就会被初始化,并且所有该类的实例共享相同的静态常量。与普通的`final`变量不同,静态常量一般使用全大写字母来命名。
总结:
- `static`用于创建静态变量,属于类级别,所有实例共享。
- `final`用于声明常量,一旦赋值后不能再修改。
- `static final`用于声明静态常量,属于类级别,所有实例共享,一旦赋值后不能再修改。
阅读全文