سلام روزتون بخیر
در قسمت تعریف یه لیست با فاینال تونستیم مقدار یکی از خونه های لیست رو تغییر بدیم بدون خطا ولی این امکان برای const وجود نداشت گفتید یخ زده میشه هنگام کامپایل،پس فاینال چی میشه؟؟ زمان اجرا مقدار دهی میشه برای یبار ؟؟درسته؟ پس برای خط دومش که مقدار رو تغییر دادید باید گیر میداد ولی اجرا شد چون خط قبل و زمان اجرا مقدار دهی شد!
سلام دوست عزیز وقت بخیر از کدتون اسکرین ارسال کنید مثل این میمونه بگین تو تهران از 4 طبقه افتادم نمردم تو آمریکا مردم اینا قوانین هستن نمیشه به نظرم
سلام وقت شما به خیر
راستش من چند باری پیام شما روخوندم
چیزی که متوجه شدم این بود چرا دوباره میشه متغیری که مقدار فاینال داره رو مقدار دهی کرد؟
این مورد خیلی بستگی به نوع داده ای داره که تعریف کردیم.
اگه primitive type باشه قطعا نمیشه دوباره مقدار دهی کرد علت این موضوع این هست که primitive type ها در ساختمان داده ای به نام stack در حافظه ذخیره میشن که وقتی میگیم این متغیر از نوع فاینال هست قطعا نمیشه مقدار رو تغییر داد.
ولی reference type ها چون مقدار در ساختمان داده ای به نام heap دخیره میشن و آدرس خونه حافظه در stack ذخیره میشه مقدار رو میشه تغییر داد ولی آدرس خونه ای از حافظه که برای اولین بار بهش تخصیص داده شده، منظورم مقداری هست که تو stack ذخیره شده رو دیگه نمیشه تغییر داد. هر بار که کانستراکتور رو صدا میزنیم کامپایلر میره و تو heap یک خونه جدید میگیره و آدرس رو تو stack ذخیره میکنه. اگه متغیر از نوع فاینال تعریف شده باشه دقیقا به همین علت که آدرس رو متفاوت میکنه نمیشه دوباره نمونه ساخت.(تو فایل پیوست این موارد رو سعی کردم ملموس تر بگم)