سوال_مصاحبه_oop:
درباره ی immutable ها توضیح دهید و چرا String ها immutable هستند؟ مزایا و معایب این ویژگی را برای String بیان کنید.
جواب: Immutable به معنی فقط خواندنی است به عبارت دیگر وقتی شما یک متغیر string تعریف و مقداردهی می کنید، دیگر نمی توانید آنرا تغییر دهید
همانطور که میدانید String ها بصورت یک آرایه از کاراکترها هستند که با هم کنار قرار گرفتن این کاراکترها، متن مورد نظر شکل می گیرد.
هنگام تعریف آرایه ها باید طول آرایه مشخص شود و بعد از تعریف آن، طول آرایه قابل اضافه و کم کردن نیست.
موقعی که شما مقدار string را تغییر می دهد چون مقدار قبلی که یک آرایه از کاراکترها است و قابل تغییر نیست، بنابراین مقدار جدید را در یک آرایه جدید کپی یا Clone می کند و با این کار یک بلوک جدید از خانه های حافظه را به آن اختصاص داده می دهد.
مزایای Immutable بودن String:
یکی از مزایای آن thread-safe بودن است. اگر شما در سیستم های multi-threaded کد میزنید، دیگر مشکلات deadlock و همزمانی را نخواهی داشت. بدین معنی که وقتی شما یک string را تغییر می دهید در واقع شما یک آبجکت جدید در حافظه تعریف می کنید.
مزیت دیگر این است که دیگر شما نگران تغییر تصادفی مقدار آنها نخواهی بود و نیاز به اقدامات دیگر که هنگام کار با آبجکت های mutable لازم است، نیست
معایب Immutable بودن String:
عیب اصلی آن می تواند تغییر های زیاد یک string باشد که موجب اختصاص فضای جدید حافظه می گردد و مشکلات پرفرمنسی به همراه دارد