Verschil tussen veranderlijke objecten en onveranderlijke objecten

Iedereen, geef het verschil tussen veranderlijke objecten en onveranderlijke objecten met een voorbeeld.


Antwoord 1, autoriteit 100%

Veranderlijke objecten hebben velden die kunnen worden gewijzigd, onveranderlijke objecten hebben geen velden die kunnen worden gewijzigd nadat het object is gemaakt.

Een heel eenvoudig onveranderlijk object is een object zonder enig veld. (Bijvoorbeeld een eenvoudige Comparator Implementatie).

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
}

Antwoord 2, autoriteit 52%

Van veranderlijke objecten kunnen hun velden worden gewijzigd na de constructie. Onveranderlijke objecten kunnen dat niet.

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

Antwoord 3, autoriteit 24%

Onveranderlijke objecten zijn gewoon objecten waarvan de toestand (de gegevens van het object) niet kunnen veranderen na de constructie. Voorbeelden van onveranderlijke objecten uit de JDK zijn String en Integer.

Bijvoorbeeld:(Punt is veranderlijk en tekenreeks onveranderlijk)

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

De uitvoer is:

java.awt.Point[0.0, 0.0]
java.awt.Point[1.0, 0.0]
old String
old String

Antwoord 4, autoriteit 17%

OnveranderlijkStatus van object kan niet worden gewijzigd.

bijvoorbeeld String.

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

Antwoord 5, autoriteit 11%

Ze verschillen niet vanuit het oogpunt van JVM. Onveranderlijke objecten hebben geen methoden die de instantievariabelen kunnen wijzigen. En de instantievariabelen zijn privé; daarom kunt u het niet wijzigen nadat u het hebt gemaakt. Een beroemd voorbeeld is String. Je hebt geen methoden zoals setString of setCharAt. En s1 = s1 + “w” zal een nieuwe string maken, waarbij de originele wordt verlaten.
Dat begrijp ik.

Other episodes