java中的可变和不可变对象

时间:2016-12-28 11:03:22

标签: java oop

有人能用一个简单的例子向我解释java中可变对象和不可变对象之间的区别吗?

1 个答案:

答案 0 :(得分:1)

可变对象是可以更改状态的对象。

Java中的状态是用数据字段实现的。

可变对象的一个​​例子:

class Counter {
    private int i = 0;

    public void increase() {
         i++;
    }
}

所以i表示此类Counter的内部状态。它可以随着时间的推移而改变:

 Counter counter = new Counter();
 counter.increase(); // somewhere in the code

另一方面,不可变对象是在创建/初始化对象后无法更改状态的对象。

这些对象不应该有“mutators” - setter,或者通常用于改变内部状态的方法。

以下是不可变对象的示例:

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 this.name;
    }

    public int getAge() {
        return this.age;
    }
}

如您所见 - 尽管此类维护状态(在字段nameage中),但在创建对象(调用构造函数)后无法更改此状态。