Oruji.org
Oruji.orgPersian Tutorials
ورود

تفاوت 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.oruji;

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.oruji;

// 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