تابستون داره تموم میشه ها، فرصت‌ها محدودن کلی آفر جذاب در کمپین تابستون🔥👇
۰ ثانیه
۰ دقیقه
۰ ساعت
۲ parisa mohamadi
نوع final
جامعه فلاتر ایجاد شده در ۱۸ مهر ۱۴۰۰

سلام روزتون بخیر

در قسمت تعریف  یه لیست با فاینال تونستیم مقدار یکی از خونه‌های لیست رو تغییر بدیم بدون خطا ولی این امکان برای const  وجود نداشت گفتید یخ زده میشه هنگام کامپایل،پس فاینال چی میشه؟؟ زمان اجرا مقدار دهی میشه برای یبار ؟؟درسته؟ پس برای خط دومش  که مقدار رو تغییر دادید باید گیر میداد ولی اجرا شد چون خط قبل و زمان اجرا مقدار دهی شد!

سلام دوست عزیز وقت بخیر از کدتون اسکرین ارسال کنید مثل این میمونه بگین تو تهران از 4 طبقه افتادم نمردم تو آمریکا مردم اینا قوانین هستن نمیشه به نظرم

Mohmmad Rasoul Abdi ۱۸ مهر ۱۴۰۰، ۱۰:۲۳

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

Fateme Afshar ۱۹ مهر ۱۴۰۰، ۱۹:۰۲