任何人都可以解釋一個簡單的例子,在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 –