web-dev-qa-db-fra.com

Différence entre les objets mutables et les objets immuables

N'importe lequel s'il vous plaît donnez le diff entre les objets mutables et les objets immuables avec l'exemple.

99
Rams

Les objets mutables ont des champs qui peuvent être modifiés, les objets immuables ne peuvent pas être modifiés après la création de l'objet.

Un objet immuable très simple est un objet sans champ. (Par exemple, une simple implémentation de comparateur).

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
}
125
Ralph

Les objets mutables peuvent avoir leurs champs modifiés après la construction. Les objets immuables ne peuvent pas.

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;
 }

}
67
Mike

Les objets immuables sont simplement des objets dont l'état (les données de l'objet) ne peut pas changer après la construction. Des exemples d'objets immuables du JDK incluent String et Integer.

Par exemple: (le point est mutable et la chaîne immuable)

     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 );

La sortie est:

Java.awt.Point[0.0, 0.0]
Java.awt.Point[1.0, 0.0]
old String
old String
31
user536158

Immuable L'état de l'objet ne peut pas être modifié.

par exemple String.

String str= "abc";//a object of string is created
str  = str + "def";// a new object of string is created and assigned to str
22
Jigar Joshi

Ils ne diffèrent pas du point de vue de la JVM. Les objets immuables ne disposent pas de méthodes pouvant modifier les variables d'instance. Et les variables d'instance sont privées; par conséquent, vous ne pouvez pas le changer après l'avoir créé. Un exemple célèbre serait String. Vous n'avez pas de méthodes comme setString ou setCharAt. Et s1 = s1 + "w" créera une nouvelle chaîne, la chaîne originale étant abandonnée. C'est ce que j'ai compris.

12
LLS