不可变对象指创建后状态不可修改的对象,如Java中的String、Integer;其核心价值在于线程安全、简化调试、安全作key、利于缓存;需满足类final、字段private final、无修改方法、构造器完全初始化、可变组件防御性拷贝等条件。
不可变对象是指一旦创建,其状态(即所有字段的值)就不能被修改的对象。在 Java 中,典型的例子是 String、Integer 等包装类。它们不是“写保护”或“逻辑上不改”,而是从设计上杜绝了外部修改内部数据的可能——这是通过语言机制和编码约定共同保障的。
不可变性带来几个关键好处:
shMap 或 HashSet 时,哈希值不会变,避免查找失败仅把字段设为 final 不够,还需满足一整套约束:
例如:传入一个 Date 字段时,不能直接保存它,而应写成 new Date(date.getTime());返回时也应 new 一份再给出去。
看似不可变,实则可能被绕过:
严格意义上的不可变要求编译期+运行期双重保障。而“有效不可变”指对象虽未完全按上述规则定义(比如类没加 final),但在实际使用中从未被修改或继承——这依赖团队约定,风险更高。生产代码建议坚持严格不可变,尤其涉及共享、并发或作为 key 的场景。
基本上就这些。不可变不是教条,而是权衡后的设计选择:它牺牲了一点灵活性,换来的是清晰性、安全性和可维护性。