Java –可变和不可变对象

一时失言乱红尘 2023-02-15 05:17 272阅读 0赞

本文向您展示Java中Mutable和Immutable对象之间的区别

  1. 可变对象 –创建对象后,您可以更改状态和字段。 例如: StringBuilderjava.util.Date等。

  2. 不可变对象 –创建对象后,您将无法进行任何更改。 例如: String ,装箱的原始对象,例如IntegerLong等。

1. Java可变示例

通常,它提供了一种修改字段值的方法,并且可以扩展对象。

MutableExample.java

  1. package com.mkyong;
  2. public class MutableExample {
  3. private String name;
  4. MutableClass(String name) {
  5. this.name = name;
  6. }
  7. public String getName() {
  8. return name;
  9. }
  10. // this setter can modify the name
  11. public void setName(String name) {
  12. this.name = name;
  13. }
  14. public static void main(String[] args) {
  15. MutableExample obj = new MutableExample("mkyong");
  16. System.out.println(obj.getName());
  17. // update the name, this object is mutable
  18. obj.setName("new mkyong");
  19. System.out.println(obj.getName());
  20. }
  21. }

输出量

  1. mkyong
  2. new mkyong

2. Java不可变示例

要创建Immutable对象,请将类定为final,并且不提供任何修改字段的方法。

ImmutableExample.java

  1. package com.mkyong;
  2. // make this class final, no one can extend this class
  3. public final class ImmutableExample {
  4. private String name;
  5. ImmutableExample (String name) {
  6. this.name = name;
  7. }
  8. public String getName() {
  9. return name;
  10. }
  11. //no setter
  12. public static void main(String[] args) {
  13. ImmutableExample obj = new ImmutableExample("mkyong");
  14. System.out.println(obj.getName());
  15. // there is no way to update the name after the object is created.
  16. // obj.setName("new mkyong");
  17. // System.out.println(obj.getName());
  18. }
  19. }

输出量

  1. mkyong

注意
不可变对象简单,线程安全(不需要同步),不易出错且更安全。 如果可能,使所有对象不变。

附言:请参阅《有效Java书籍》第15项:最小化可变性。

参考文献

  1. 可变对象与不可变对象
  2. 根据Java文档的不可变对象

标签: 不可变的 java 可变

翻译自: https://mkyong.com/java/java-mutable-and-immutable-objects/

发表评论

表情:
评论列表 (有 0 条评论,272人围观)

还没有评论,来说两句吧...

相关阅读

    相关 【并发】并发-不可对象

    一个对象如果在创建后不能被修改,那么就称为不可变对象。在并发编程中,一种被普遍认可的原则就是:尽可能的使用不可变对象来创建简单、可靠的代码。   在并发编程

    相关 不可对象

    什么是不可变对象? 众所周知, 在Java中, String类是不可变的。那么到底什么是不可变的对象呢? 可以这样认为:如果一个对象,在它创建完成之后,不能再改变它的状态