首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可变对象与不可变对象的区别

可变对象与不可变对象的区别
EN

Stack Overflow用户
提问于 2011-01-11 22:06:37
回答 5查看 183.4K关注 0票数 107

请举例说明可变对象和不可变对象的区别。

EN

回答 5

Stack Overflow用户

发布于 2011-01-11 22:12:03

可变对象具有可更改的字段,不可变对象在对象创建后没有可更改的字段。

一个非常简单的不可变对象是一个没有任何字段的对象。(例如,一个简单的比较器实现)。

代码语言:javascript
复制
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
}
票数 133
EN

Stack Overflow用户

发布于 2011-01-11 22:09:14

可变对象可以在构造后更改其字段。不可变对象不能。

代码语言:javascript
复制
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;
 }

}
票数 69
EN

Stack Overflow用户

发布于 2011-01-11 22:20:07

不可变对象仅仅是其状态(对象的数据)在构造后不能改变的对象。JDK中的不可变对象的示例包括String和Integer。

例如:(Point是可变的,string是不可变的)

代码语言:javascript
复制
     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 );

输出为:

代码语言:javascript
复制
java.awt.Point[0.0, 0.0]
java.awt.Point[1.0, 0.0]
old String
old String
票数 32
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4658453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档