Trong Java, không thể sửa đổi trạng thái của đối tượng không thể thay đổi sau khi nó được tạo bởi vì nó chắc chắn tham chiếu đến các đối tượng khác. Chúng rất hữu ích trong môi trường đa luồng vì nhiều luồng không thể thay đổi trạng thái của đối tượng vì vậy các đối tượng không thay đổi được an toàn cho luồng. Các đối tượng bất biến rất hữu ích để tránh khớp nối tạm thời và luôn có tính nguyên tử không thành công.
Mặt khác, các đối tượng có thể thay đổi có các trường có thể thay đổi, các đối tượng bất biến không có trường nào có thể thay đổi sau khi đối tượng được tạo.
Sr. Không. | Phím | Đối tượng có thể thay đổi | Đối tượng bất biến |
---|---|---|---|
1 | Cơ bản | Chúng ta có thể sửa đổi trạng thái của một đối tượng có thể thay đổi sau khi nó được tạo | Chúng tôi không thể sửa đổi trạng thái của đối tượng sau khi nó được tạo. |
2 | An toàn chuỗi | Các đối tượng có thể thay đổi không an toàn cho chuỗi | Các đối tượng bất biến là luồng an toàn. |
3 | Cuối cùng | Lớp có thể thay đổi không phải là lớp cuối cùng | Để tạo một đối tượng không thay đổi, hãy tạo lớp cuối cùng |
4 | Ví dụ | Theo mặc định, tất cả các lớp và đối tượng của nó đều có thể thay đổi theo bản chất. | Chuỗi và tất cả lớp trình bao bọc là ví dụ về các lớp bất biến |
Ví dụ về Lớp bất biến
public final class ImmutableClass { private String laptop; public String getLaptop() { return laptop; } public ImmutableClass(String laptop) { super(); this.laptop = laptop; } } public class Main { public static void main(String args[]) { ImmutableClass immutableClass = new ImmutableClass("Dell"); System.out.println(immutableClass.getLaptop()); } }
Ví dụ về Lớp Muttable
public class MuttableClass { private String laptop; public String getLaptop() { return laptop; } public void setLaptop(String laptop) { this.laptop = laptop; } public MuttableClass(String laptop) { super(); this.laptop = laptop; } } public class Main { public static void main(String args[]) { MuttableClass muttableClass = new MuttableClass("Dell"); System.out.println(muttableClass.getLaptop()); muttableClass.setLaptop("IBM"); System.out.println(muttableClass.getLaptop()); } }