immutable là gì

Bài ghi chép được sự được chấp nhận của người sáng tác Trần Hữu Cương

  • Immutable hiểu nôm mãng cầu là ko thể thay cho thay đổi còn mutable là hoàn toàn có thể thay cho thay đổi.
  • 2 định nghĩa Immutable và mutable thông thường được sử dụng class, object (Immutable đôi lúc còn sử dụng với Collection tuy nhiên bản thân sẽ không còn nhằm cập ở bài bác này).

Ví dụ: Trong Java String là Immutable còn StringBuffer và StringBuilder là mutable.

Bạn đang xem: immutable là gì

1 Class/Đối tượng được xem như là immutable nếu như những tính chất của chính nó ko khi nào bị thay cho thay đổi và chỉ hoàn toàn có thể thiết lập khi khởi tạo ra.

  • Ví dụ Immutable với String

Immutable với String

// Khởi tạo ra str1 = "first"
String str1 = new String("first");

// Khởi tạo ra str2 tham lam chiếu cho tới str1
String str2 = str1;

// String là immutable, bất kì thao tác này bên trên String đều tạo nên 1 đối tượng người dùng mới
// str1.concat("-second") tiếp tục trả về 1 đối tượng người dùng String mới nhất có mức giá trị là "first-second"
str1 = str1.concat("-second");

System.out.println("str1: "+str1);
System.out.println("str2: "+str2);

Kết quả

Xem thêm: transactions là gì

str1: first-second
str2: first
  • Ví dụ Mutable với StringBuffer

Immutable với String

// Khởi tạo ra str1 = "first"
StringBuffer str1 = new StringBuffer("first");

// Khởi tạo ra str2 tham lam chiếu cho tới str1
StringBuffer str2 = str1;

// StringBuffer là mutable, vì thế Khi append thì độ quý hiếm của chính nó tiếp tục thay cho thay đổi bên trên chủ yếu vùng lưu giữ ban dầu
str1.append("-second");

System.out.println("str1: "+str1);
System.out.println("str2: "+str2);

Kết quả:

str1: first-second
str2: first-second

Tham khảo việc thực hiện NodeJS thú vị bên trên TopDev

Xem thêm: thường xuyên tiếng anh là gì

2. Tại sao lại sử dụng Immutable

  • Giống như ví dụ với String bên trên, tớ thấy được dùng immutable tiếp tục tránh khỏi sự thay cho thay đổi cho nhau Khi nhiều tham lam chiếu (str1 và str2 nằm trong tham lam chiếu cho tới 1 vùng lưu giữ tuy nhiên Khi str1 thay cho thay đổi thì str2 sẽ không còn thay cho đổi)
  • Thread Safe: Khi dùng immutable object tớ tiếp tục không nhất thiết phải lo lắng cho tới việc nhiều thread nằm trong thực hiện thay cho thay đổi độ quý hiếm của một object
  • Sử dụng những immutable object thực hiện thông số của method sẽ không còn kinh hồn nó bị thay cho thay đổi sau thời điểm method kết thúc
  • Sử dụng immutable object nhằm thực hiện key vô HashMap hoặc đẩy vô HashTable nhưng mà ko bắt gặp yếu tố gì Khi kéo ra.

3. Cách tạo ra 1 Class Immutable

  • Phải là final class (không thể quá kế tiếp vì thế class khác)
  • Các field cần là private final
  • Không với những method thực hiện thay cho thay đổi tình trạng của những field (Ví dụ: chỉ mất hàm get, không tồn tại những hàm set)
  • Nếu với field này là Object thì field này cũng cần là một immutable Object hoặc Khi khởi tạo/lấy đi ra field cơ tớ cần clone đi ra 1 phiên bản không giống.

Bài ghi chép gốc được đăng lên tại stackjava.com

Có thể các bạn quan tiền tâm:

  • Mechanical Sympathy Là Gì? Lập Trình BackEnd vì thế Java
  • Fuzzy tìm kiếm là gì? Những điều nên biết về thuật toán fuzzy
  • Một số phép tắc, tấp tểnh luật vô lập trình

Tìm việc thực hiện IT tiên tiến nhất bên trên TopDev ngay!

Tác giả

Bình luận