JavaRush /وبلاگ جاوا /Random-FA /انتقال پارامترها در جاوا
vincent_vega
مرحله
Gainesville

انتقال پارامترها در جاوا

در گروه منتشر شد
متغیر در جاوا محفظه ای است که مقداری در آن وجود دارد. بنابراین "گذراندن" یک متغیر به چه معناست؟ و تفاوت بین انواع داده های اولیه و مرجع چیست؟
ارسال پارامترها در جاوا - 1
بعداً به آن خواهیم رسید. بیایید ابتدا با یک تکلیف ساده شروع کنیم. کاری که این کد انجام می دهد:
int х = 3;
int у = х;
در خط 1، یک متغیر x از نوع int ایجاد می شود و مقدار 3 را به آن اختصاص می دهد. در خط 2، یک متغیر y از نوع int ایجاد می شود و مقدار متغیر x را به آن اختصاص می دهد . در آینده، متغیر x به هیچ وجه بر y تأثیر نمی گذارد . جاوا مقدار x (3) را کپی می کند و آن را در y قرار می دهد . این انتقال یک پارامتر بر اساس مقدار است. شما یک متغیر را روی متغیر دیگر نمی نویسید. مقدار کپی شده و به یک متغیر جدید اختصاص داده می شود. عبارت y = x; به معنای "نوشتن x به y " نیست . این به معنای "مقدار داخل x را کپی کنید و آن کپی را در y بنویسید ." اگر بعداً y را تغییر دهم :
у = 34;
آیا این روی x تاثیر می گذارد ؟ البته که نه. x هنوز مقدار 3 را دارد. اگر x را بعداً تغییر دهم :
х = 90;
این چگونه بر y تأثیر می گذارد ؟ به هیچ وجه. پس از انجام انتساب (کپی کردن مقدار) به هیچ وجه با هم مرتبط نیستند. در مورد انواع مرجع چطور؟ چطورکار می کنند؟ آنقدرها هم سخت نیست، در واقع قاعده یکسان است. پیوندها همین کار را می کنند - شما یک کپی از پیوند دریافت می کنید. پس اگر بگویم:
Cat A = new Cat ();
Cat B = A;
پیوند A در پیوند B کپی می شود. این در مورد شی صدق نمی کند - شما هنوز فقط یک شی دارید. اما اکنون شما دو مرجع مختلف دارید که یک شی Cat یکسان را کنترل می کنند . اکنون اجازه دهید به انتقال پارامترها به متدها نگاه کنیم. جاوا پارامترها را بر اساس مقدار ارسال می کند. همیشه. این به معنای "کپی کردن مقدار و ارسال کپی" است. برای انواع اولیه آسان است:
int х = 5;
doStuff (х); / / Передать копию х (meaning 5) в метод doStuff
روش doStuff به شکل زیر است:
void doStuff (int у) {

   / / Действия с 'y'
}
یک کپی از مقدار x ، یعنی 5، به متد doStuff() ارسال می شود . متد doStuff() دارای متغیر مخصوص به خود به نام y است . متغیر y یک متغیر جدید و متفاوت است. با یک کپی از آنچه در x در زمان ارسال آن به متد بود. از این به بعد y و x هیچ تاثیری روی هم ندارند. وقتی y را تغییر می دهید، بر x تأثیر نمی گذارید .
void doStuff (int у) {

   у = 27; / / Это не влияет на 'х'
}
و بالعکس - اگر x را تغییر دهید، y را تغییر نخواهید داد . تنها کاری که x در این مورد انجام داد ، کپی کردن مقدار آن و ارسال آن به متد ()doStuff بود . چگونه "گذر از ارزش" با مراجع کار می کند؟ بسیاری از مردم می گویند، "جاوا انواع اولیه را بر اساس مقدار و اشیاء را با مرجع ارسال می کند." این چیزی نیست که آنها می گویند. جاوا همه چیز را با ارزش عبور می دهد. با بدوی، یک کپی از محتوا دریافت می کنید. با پیوندها یک کپی از محتوا نیز دریافت می کنید. اما محتوای لینک چیست؟ کنترل از راه دور. امکانات برای مدیریت/دسترسی به تسهیلات. هنگامی که یک مرجع به یک شی را به یک متد ارسال می کنید، یک کپی از مرجع را ارسال می کنید. کلون کنترل از راه دور جسم هنوز در انبوهی که در آن ایجاد شده است، نشسته است و منتظر است تا کسی از کنترل از راه دور استفاده کند. این مرکز اهمیتی نمی‌دهد که چه تعداد از راه دور برای کنترل آن برنامه‌ریزی شده است. تنها افرادی که به این موضوع اهمیت می دهند زباله جمع کن و شما برنامه نویس هستید. پس وقتی می گویید:
Cat A = new Cat ();
doStuff (А);

void doStuff (Cat B) {

   / / Использование B
}
فقط یک شی Cat وجود دارد . اما اکنون دو کنترل از راه دور (پیوندها) می توانند به یک شی Cat دسترسی داشته باشند . بنابراین اکنون هر کاری که B با شی Cat انجام دهد، بر Cat اشاره شده توسط A تأثیر می گذارد ، اما بر محتوای A تأثیر نمی گذارد ! می توانید Cat را با استفاده از پیوند جدید B (که مستقیماً از A کپی شده است ) تغییر دهید، اما نمی توانید A را تغییر دهید. این لعنتی چه معنی میده؟ می‌توانید شی‌ای را که A به آن ارجاع می‌دهد تغییر دهید ، اما نمی‌توانید مرجع A را تغییر دهید - آن را به یک شی دیگر یا null هدایت کنید . بنابراین اگر مرجع B را تغییر دهید (نه شی Cat واقعی که B به آن ارجاع می دهد ، بلکه مقدار خود مرجع) مقدار A را تغییر نمی دهید . و بالعکس. بنابراین:
Cat A = new Cat ();
doStuff (А);

void doStuff (Cat B) {

   B = new Cat (); / / Не повлияет на ссылку A
}
به سادگی به این معنی است که B به یک شی دیگر اشاره می کند. A هنوز خوشحال است. پس بعد از من تکرار کنید: جاوا همه چیز را با ارزش عبور می دهد. (باشه، یک بار دیگر... با احساس.) جاوا همه چیز را با ارزش رد می کند. برای انواع اولیه شما یک کپی از مقدار فعلی را ارسال می کنید، برای مراجع شی یک کپی از مرجع (کنترل از راه دور) ارسال می کنید. شما هرگز از شی عبور نمی کنید. همه اشیاء روی پشته ذخیره می شوند. همیشه. حالا یک فنجان قهوه سنگین دم کنید و یک کد بنویسید! مقاله اصلی .
نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION