任何人都可以通過示例給出可變對象和不可變對象之間的差異。可變對象和不可變對象之間的區別
78
A
回答
53
可變對象的構造後可以更改它們的字段。不可變對象不能。
public class MutableClass {
private int value;
public MutableClass(int aValue) {
value = aValue;
}
public void setValue(int aValue) {
value = aValue;
}
public getValue() {
return value;
}
}
public class ImmutableClass {
private final int value;
// changed the constructor to say Immutable instead of mutable
public ImmutableClass (final int aValue) {
//The value is set. Now, and forever.
value = aValue;
}
public final getValue() {
return value;
}
}
+2
+1,因爲您在@Ralph之前回答,更明確地說 – KNU 2014-10-02 16:44:54
19
Immutable對象的狀態不能改變。
例如String
。
String str= "abc";//a object of string is created
str = str + "def";// a new object of string is created and assigned to str
97
可變對象具有可以更改的字段,不可變對象沒有可以在對象創建後更改的字段。
一個非常簡單的不可變對象是一個沒有任何字段的對象。 (例如一個簡單的比較器實現)。
class Mutable{
private int value;
public Mutable(int value) {
this.value = value;
}
//getter and setter for value
}
class Immutable {
private final int value;
public Immutable(int value) {
this.value = value;
}
//only getter
}
10
他們不是但從JVM的不同點。不可變對象沒有可以更改實例變量的方法。而實例變量是私有的;因此創建後無法對其進行更改。一個着名的例子是String。你沒有像setString或setCharAt這樣的方法。並且s1 = s1 +「w」將創建一個新的字符串,並放棄原來的字符串。 這是我的理解。
29
不可變對象只是對象的狀態(對象的數據)在構造後無法更改。來自JDK的不可變對象的示例包括String和Integer。
例如:(點是可變的和不可變的字符串)
Point myPoint = new Point(0, 0);
System.out.println(myPoint);
myPoint.setLocation(1.0, 0.0);
System.out.println(myPoint);
String myString = new String("old String");
System.out.println(myString);
myString.replaceAll("old", "new");
System.out.println(myString);
的輸出是:
java.awt.Point[0.0, 0.0]
java.awt.Point[1.0, 0.0]
old String
old String
相關問題
- 1. 對象和變量對象之間的區別
- 2. 不可變對象內的可變對象
- 3. 對象不可變與對象的引用是不可變的是什麼區別?
- 4. 對象和字典之間的區別?
- 5. 對象和散列之間的區別?
- 6. 與對象initialisers不可變對象
- 7. 將可變對象轉換爲不可變對象
- 8. null ==對象和對象== null之間的區別
- 9. jvisualvm活動對象和分配對象之間的區別
- 10. mysqltransaction對象(mysql)和transactionscope對象(asp.net)之間的區別
- 11. 子對象和包含對象之間的區別
- 12. 面向對象和非面向對象之間的區別javascript
- 13. 對象和字符串對象之間的區別是什麼
- 14. iPhone [(id)對象類]和object_getClassName(id對象)之間的區別
- 15. Kotlin:對象和同伴對象之間的區別
- 16. 對象引用聲明和對象構造之間的區別?
- 17. Hibernate不可變值對象
- 18. 對象不可變異
- 19. 有效不可變對象
- 20. 序列化和不可變的對象
- 21. 對象和變量有什麼區別?
- 22. 爲什麼不可變的對象拋出UnboundLocalError但可變的對象不?
- 23. _EPROCESS對象和_KPROCESS對象之間有什麼區別
- 24. java中的可變和不可變對象
- 25. 存儲庫和不可變對象?
- 26. 不可變值對象和JPA
- 27. NET/Silverlight:不可變對象和DataContractSerializer
- 28. 不可變對象之間的事件處理
- 29. 實例化不可變配對對象
- 30. 函數對象之間的區別R
`String`類是不可變的對象的一個很好的例子。 – Qwerky 2011-01-11 14:10:44
另請參見[可變與不可變對象](http://stackoverflow.com/questions/214714/mutable-vs-immutable-objects)(不是Java特定的) – 2011-01-11 14:15:01
btw,看看[`com.jcabi.aspects .Immutable`](http://www.jcabi.com/jcabi-aspects/annotation-immutable.html)註釋 – yegor256 2013-02-18 07:06:00