Разница между Mutable objects и неизменяемыми объектами

Любой, пожалуйста, дайте разницу между Mutable objects и Immutable objects с примером.

Ответ 1

У Mutable objects есть поля, которые можно изменить, неизменяемые объекты не имеют полей, которые могут быть изменены после создания объекта.

Очень простой неизменяемый объект - это объект без какого-либо поля. (Например, простая реализация Компаратора).

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
}

Ответ 2

Объекты Mutable могут изменять свои поля после построения. Неизменяемые объекты не могут.

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

}

Ответ 3

Неизменяемые объекты - это просто объекты, состояние которых (данные объекта) не может измениться после построения. Примеры неизменяемых объектов из 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

Ответ 4

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

Ответ 5

Они не отличаются от точки зрения JVM. У неизменяемых объектов нет методов, которые могут изменять переменные экземпляра. И переменные экземпляра являются частными; поэтому вы не можете изменить его после его создания. Известным примером будет String. У вас нет таких методов, как setString или setCharAt. И s1 = s1 + "w" создаст новую строку, а исходная будет оставлена. Это мое понимание.