在 Java 中,“不可变变量”通常可以从两个层面理解:变量引用不可变 和 对象本身不可变。下面分别说明。
使用 final 关键字修饰变量,表示该变量的引用不能再次指向其他对象。
final int x = 10;
// x = 20; // 编译错误
public class Person {
private final String name;
public Person(String name) {
this.name = name;
}
}
public static final int MAX_COUNT = 100;
注意:
final只保证引用不变,不保证对象内容不变。
final List<String> list = new ArrayList<>();
list.add("a"); // 合法,对象内容可变
// list = new ArrayList<>(); // 非法
要让一个对象“不可变”,需要满足:
final 修饰(防止被继承修改行为)private final 修饰public final class ImmutablePoint {
private final int x;
private final int y;
public ImmutablePoint(int x, int y) {
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
}
Java 提供多种方式创建不可变集合:
List<String> list = List.of("a", "b", "c");
List<String> list = Collections.unmodifiableList(
new ArrayList<>(Arrays.asList("a", "b"))
);
❌ final ≠ 不可变对象
✅ final 只是引用不可变
如果你指的是 String 为什么不可变、常量定义、或 并发中的不可变变量,可以继续问我。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。