简短结论:Java 里的“不可变(immutable)”本身不一定直接提升运行性能,但在很多场景下能“间接提升性能”或“避免性能损耗”,并且能显著提升并发安全和开发效率。
下面分点说清楚。
不可变对象:
✅ 好处:
例子:
final class Point {
final int x;
final int y;
Point(int x, int y) { this.x = x; this.y = y; }
}
多个线程同时读 Point 不会出问题。
不可变对象可以被:
例如:
String a = "abc";
String b = "abc"; // 复用常量池
✅ 减少对象创建和 GC 压力
可变对象做 key 如果改了内容,会:
不可变对象:
private final int hash; // 构造时算一次
可变对象常需要:
return new ArrayList(innerList);
不可变对象直接返回引用即可。
✅ 少一次拷贝
比如:
String s = "";
for (int i = 0; i < 100000; i++) {
s += i; // 每次新 String
}
❌ 性能差(应使用 StringBuilder)
如果对象很大(数组、集合):
final ≠ 性能优化指令| 类型 | 作用 |
|---|---|
String |
常量池、线程安全 |
Integer/Long |
缓存(-128~127) |
record (Java 17+) |
轻量不可变数据 |
List.of() / Map.of() |
不可变集合 |
| 函数式编程 | 无副作用 |
不可变不是“让代码跑更快的魔法”,而是“让程序更安全、可复用、少出错,从而在正确设计中整体更高效”。
如果你愿意,我可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。