Java - изменяемые и неизменяемые объекты

Java - изменяемые и неизменяемые объекты

В этой статье показана разница между объектами Mutable и Immutable в Java.

1. Mutable object - Вы можете изменить состояния и поля после создания объекта. Например:StringBuilder,java.util.Date и т. Д.

2. Immutable object - Вы не можете ничего изменить после создания объекта. Например:String, упакованные примитивные объекты, такие какInteger,Long и т. Д.

1. Пример изменяемого Java

Обычно он предоставляет метод для изменения значения поля, и объект может быть расширен.

MutableExample.java

package com.example;

public class MutableExample {

    private String name;

    MutableClass(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    // this setter can modify the name
    public void setName(String name) {
        this.name = name;
    }

    public static void main(String[] args) {

        MutableExample obj = new MutableExample("example");
        System.out.println(obj.getName());

        // update the name, this object is mutable
        obj.setName("new example");
        System.out.println(obj.getName());

    }
}

Выход

example
new example

2. Неизменяемый пример Java

Чтобы создать неизменяемый объект, сделайте класс окончательным и не предоставляйте никаких методов для изменения полей.

ImmutableExample.java

package com.example;

// make this class final, no one can extend this class
public final class ImmutableExample {

    private String name;

    ImmutableExample (String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    //no setter

    public static void main(String[] args) {

        ImmutableExample obj = new ImmutableExample("example");
        System.out.println(obj.getName());

        // there is no way to update the name after the object is created.
        // obj.setName("new example");
        // System.out.println(obj.getName());

    }
}

Выход

example

Note
Неизменяемый объект прост, потокобезопасен (не требует синхронизации), менее подвержен ошибкам и более безопасен. Если возможно, сделайте все объекты неизменяемыми.

P.S Please refer to the Effective Java Book – Item 15: Minimize mutability.