在 Java 里,**“不可变变量”**这个说法通常有几种理解,最常见的是下面两种情况。我分别说明,并给出例子,避免混淆。
final 变量)这是最常被叫做“不可变变量”的情况。
使用 final 修饰的变量:
final int x = 10;
// x = 20; // 编译错误
final List<String> list = new ArrayList<>();
list.add("hello"); // 合法
// list = new ArrayList<>(); // 编译错误
✅ 变量引用不可变
❌ 对象内容不一定不可变
这是更严格、更常见的“不可变”概念。
对象创建后:
final 修饰private final 修饰public final class Person {
private final String name;
private final int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
Person p = new Person("Tom", 18);
// p.name = "Jerry"; // 不可修改
Java 中的典型不可变类:
StringInteger、Long 等包装类LocalDate、LocalDateTime| 说法 | 含义 |
|---|---|
| 不可变变量 | 通常指 final 变量 |
| 不可变对象 | 对象状态不可变 |
| 不可变类 | 所有实例都不可变 |
✅ 线程安全
✅ 易于推理
✅ 可作为 Map 的 key
✅ 避免意外修改
如果你是指 final 变量、String 为什么不可变,还是 如何设计一个不可变类,可以告诉我,我可以针对性讲。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。