Ral*_*lph 127
可变对象具有可以更改的字段,不可变对象没有可在创建对象后更改的字段.
一个非常简单的不可变对象是没有任何字段的对象.(例如,简单的比较器实现).
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
}
Run Code Online (Sandbox Code Playgroud)
Mik*_*ike 69
可变对象可以在构造后更改其字段.不可变对象不能.
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;
}
}
Run Code Online (Sandbox Code Playgroud)
小智 31
不可变对象只是在构造之后状态(对象的数据)不能改变的对象.JDK中的不可变对象的示例包括String和Integer.
例如:( Point是可变的,字符串是不可变的)
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 );
Run Code Online (Sandbox Code Playgroud)
输出是:
java.awt.Point[0.0, 0.0]
java.awt.Point[1.0, 0.0]
old String
old String
Run Code Online (Sandbox Code Playgroud)
Jig*_*shi 22
不可变对象的状态不能改变.
例如String
.
String str= "abc";//a object of string is created
str = str + "def";// a new object of string is created and assigned to str
Run Code Online (Sandbox Code Playgroud)
LLS*_*LLS 13
它们与JVM的观点没有什么不同.不可变对象没有可以更改实例变量的方法.实例变量是私有的; 因此,您在创建它后无法更改它.一个着名的例子是String.您没有setString或setCharAt等方法.并且s1 = s1 +"w"将创建一个新字符串,原始字符串被放弃.这是我的理解.