2016-12-28 67 views
-1

任何人都可以解释一个简单的例子,在java中的可变和不可变对象之间的区别?java中的可变和不可变对象

+1

我确定有很多可用的资源。这[SO](http://stackoverflow.com/questions/279507/what-is-meant-by-immutable)可能会有所帮助。 – Kulasangar

+9

下面是关于这个主题的一个很好的链接:http://stackoverflow.com/questions/214714/mutable-vs-immutable-objects –

回答

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'设置器,或者在一般的方法中改变内部状态。

这里是一个不可变对象的例子:

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) 它不可能在创建对象之后,再改变这种状态(构造函数被称为)

希望这会有所帮助

+0

为了让Person真正不可变,你还应该让class为final,以防止恶意/愚蠢的用户从扩展它并添加可变数据/行为或覆盖现有方法之一,使它们突变基础对象。 – sisyphus

+0

是的,你是对的。我正在更改代码 –