oruji.github.io
oruji.github.ioPersian Tutorials
ویرایش: 1396/11/13 20:13
A A

تفاوت object تغییرپذیر (mutable) و تغییرناپذیر (immutable) در جاوا

در این آموزش از کتاب برخط جاوا، تفاوت بین شیء (object) های mutable و immutable نشان داده می شود.

1. Mutable Objects: شما می توانید وضعیت و فیلدهای شیء یا object را بعد از ایجاد شدن تغییر دهید. برای مثال: StringBuilder ،java.util.Date و غیره.

2. Immutable Object: شما نمی توانید هیچ چیزی را بعد از ایجاد شدن object تغییر دهید. برای مثال: String ،Integer ،Long و غیره.

مثال Mutable جاوا

به طور معمول، متدی برای ویرایش مقدار فیلد در خود دارد، و object می تواند گسترش پیدا کند.

package org.amoozesh; 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("oruji"); System.out.println(obj.getName()); // update the name, this object is mutable obj.setName("new oruji"); System.out.println(obj.getName()); } }

خروجی برنامه

oruji new oruji

مثال Immutable جاوا

برای ایجاد یک object تغییر ناپدیر (immutable)، کلاس را به صورت final تعریف کرده، و هیچ متدی برای ویرایش فیلدها ایجاد نکنید.

package org.amoozesh; // 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("oruji"); System.out.println(obj.getName()); // there is no way to update the name after the object is created. // obj.setName("new oruji"); // System.out.println(obj.getName()); } }

خروجی برنامه

oruji

نکته

object تغییر ناپذیر (Immutable) ساده، thread-safe (بدون نیاز به synchronization)، بسیار کم مستعد خطا و امن تر است. در صورت امکان، تمامی object ها را immutable ایجاد کنید.

منابع

  1. Mutable vs immutable objects