任何人都可以解釋一個簡單的例子,在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. java不可改變的對象問題
- 5. 不可變對象和有效不可變對象之間的區別?
- 6. 不可變對象內的可變對象
- 7. 修改非不可變對象,JAVA
- 8. Java是否優化不可變對象?
- 9. 保留對目標c中的可變和不可變對象的計數?
- 10. 序列化和不可變的對象
- 11. 不可變的對象和更新
- 12. 將可變對象轉換爲不可變對象
- 13. C++中的不可變對象的可變容器
- 14. 在java中序列化可變對象
- 15. 轉化Scala的可變參數爲Java對象...可變參數
- 16. 將可變對象鎖定爲python中的不可變
- 17. 對象不可變異
- 18. 更新不可變對象
- 19. Hibernate不可變值對象
- 20. 有效不可變對象
- 21. Spring DAO和不可變對象
- 22. 不可變值對象和JPA
- 23. 存儲庫和不可變對象?
- 24. NET/Silverlight:不可變對象和DataContractSerializer
- 25. 任何方式來從C#中的不可變對象派生可變對象?
- 26. 爲什麼不可變的對象拋出UnboundLocalError但可變的對象不?
- 27. 與對象initialisers不可變對象
- 28. 可變字段的對象在Java集
- 29. 具有可變對象的Java集合
- 30. 與Java對象的更換可變
我確定有很多可用的資源。這[SO](http://stackoverflow.com/questions/279507/what-is-meant-by-immutable)可能會有所幫助。 – Kulasangar
下面是關於這個主題的一個很好的鏈接:http://stackoverflow.com/questions/214714/mutable-vs-immutable-objects –