请举例说明可变对象和不可变对象的区别。
发布于 2011-01-11 22:12:03
可变对象具有可更改的字段,不可变对象在对象创建后没有可更改的字段。
一个非常简单的不可变对象是一个没有任何字段的对象。(例如,一个简单的比较器实现)。
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
}发布于 2011-01-11 22:09:14
可变对象可以在构造后更改其字段。不可变对象不能。
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;
}
}发布于 2011-01-11 22:20:07
不可变对象仅仅是其状态(对象的数据)在构造后不能改变的对象。JDK中的不可变对象的示例包括String和Integer。
例如:(Point是可变的,string是不可变的)
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 Stringhttps://stackoverflow.com/questions/4658453
复制相似问题