任何人都可以解释一个简单的例子,在java中的可变和不可变对象之间的区别?java中的可变和不可变对象
-1
A
回答
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;
}
}
正如你看到的 - 虽然这个类保持状态(场name
和age
) 它不可能在创建对象之后,再改变这种状态(构造函数被称为)
希望这会有所帮助
+0
为了让Person真正不可变,你还应该让class为final,以防止恶意/愚蠢的用户从扩展它并添加可变数据/行为或覆盖现有方法之一,使它们突变基础对象。 – sisyphus
+0
是的,你是对的。我正在更改代码 –
相关问题
- 1. 可变对象和不可变对象之间的区别
- 2. 克隆Java中的不可变对象
- 3. java不可改变的对象问题
- 4. 不可变对象内的可变对象
- 5. Java是否优化不可变对象?
- 6. 保留对目标c中的可变和不可变对象的计数?
- 7. 序列化和不可变的对象
- 8. 将可变对象转换为不可变对象
- 9. C++中的不可变对象的可变容器
- 10. 在java中序列化可变对象
- 11. 转化Scala的可变参数为Java对象...可变参数
- 12. Hibernate不可变值对象
- 13. 对象不可变异
- 14. 有效不可变对象
- 15. 存储库和不可变对象?
- 16. 不可变值对象和JPA
- 17. NET/Silverlight:不可变对象和DataContractSerializer
- 18. 任何方式来从C#中的不可变对象派生可变对象?
- 19. 为什么不可变的对象抛出UnboundLocalError但可变的对象不?
- 20. 与对象initialisers不可变对象
- 21. 可变字段的对象在Java集
- 22. 具有可变对象的Java集合
- 23. 与Java对象的更换可变
- 24. 可变和不可变类
- 25. 将不可变对象转换为不可变对象(不可变或生成器)
- 26. Java中的不可变bean
- 27. java中的不可变类
- 28. 是System.Security.SecureString对象是不可变还是可变的?
- 29. Java中的String对象是不可变的吗?
- 30. 在JSP中创建不可变对象
我确定有很多可用的资源。这[SO](http://stackoverflow.com/questions/279507/what-is-meant-by-immutable)可能会有所帮助。 – Kulasangar
下面是关于这个主题的一个很好的链接:http://stackoverflow.com/questions/214714/mutable-vs-immutable-objects –