در حال بارگذاری...

equals در Java

متن String را با equals مقایسه کنید تا واژه‌های جور true چاپ کنند. در Yard.java بنویسید String a = "red"; و String b = "red";، بعد a.equals(b) را چاپ کنید. String c = "blue"; را اضافه کنید و a.equals(c) را چاپ کنید. با javac Yard.java ترجمه کنید و java Yard را اجرا کنید. صفحه باید اول true بعد false را نشان دهد. دموی دوم دو شیء new String("red") می‌سازد تا == بتواند false چاپ کند در حالی که equals هنوز true چاپ می‌کند. debugging را برای صفحهٔ بعد بگذارید — این درس جور بودن محتوا در برابر هویت شیء است.

با equals متن را جور کنید

صفحهٔ polymorphism بدنه‌های متفاوت horn را از طریق متغیرهای typed از نوع Machine اجرا کرد. این صفحه متن را مقایسه می‌کند. فایل Yard.java را باز کنید. نام کلاس عمومی را Yard نگه دارید. دموهای باقی‌ماندهٔ Machine / Truck / Car اگر داستان رشته را دفن می‌کنند، پر کردن‌های abstract، دموهای مسیر، و هر Scanner صفحه‌کلید را پاک کنید. برنامه نباید منتظر تایپ بماند. برای این دموها به سطر import نیاز ندارید.
داخل Yard.main سه رشته بسازید:
String a = "red";
String b = "red";
String c = "blue";
مقایسه‌ها را چاپ کنید:
System.out.println(a.equals(b));
System.out.println(a.equals(c));
متد equals به نویسه‌ها نگاه می‌کند. متن یکسان true برمی‌گرداند. متن متفاوت false برمی‌گرداند.

Yard equals red and blue

java
public class Yard {
    public static void main(String[] args) {
        String a = "red";
        String b = "red";
        String c = "blue";
        System.out.println(a.equals(b));
        System.out.println(a.equals(c));
    }
}

از پوشه‌ای که Yard.java را نگه می‌دارد javac Yard.java را اجرا کنید. وقتی پرانتز، آکولاد و نقطه‌ویرگول درست باشند، javac سطر خروجی خودش نمی‌نویسد. بعد java Yard را اجرا کنید — نه java Yard.java. پسوند .java را از دستور اجرا بردارید. یک کلاس عمومی در فایل بگذارید تا نام با Yard یکی باشد.
صفحه اول true بعد false را نشان می‌دهد. یک‌بار اجرا را قدم‌به‌قدم ببینید. Java از Yard.main شروع می‌کند. a.equals(b) مقدار red را با red مقایسه می‌کند و true چاپ می‌کند. a.equals(c) مقدار red را با blue مقایسه می‌کند و false چاپ می‌کند. شما متدی را روی a صدا زدید و رشتهٔ دیگر را به‌عنوان آرگومان دادید.
اگر هنوز از فایل polymorphism مقدار tone / honk / beep می‌بینید، به فایل تدریس equals برگردید و دوباره java Yard را اجرا کنید. اگر خود رشته‌ها را چاپ کنید به‌جای نتیجهٔ equals، روی صفحه red و blue می‌بینید — a.equals(b) را داخل println بپیچید تا boolean ظاهر شود.
قانون را بلند بگویید وقتی صفحه را می‌بینید: equals می‌پرسد آیا متن نویسه‌به‌نویسه جور است. در این صفحه پنجرهٔ debugger اختراع نکنید. debugging برای درس بعدی است.

تضاد == با equals روی new String

برنامهٔ دوم دو شیء String جدا با new می‌سازد. هر دو متن red را نگه می‌دارند. برنامه اول a == b را چاپ می‌کند بعد a.equals(b) را.

Yard == false equals true

java
public class Yard {
    public static void main(String[] args) {
        String a = new String("red");
        String b = new String("red");
        System.out.println(a == b);
        System.out.println(a.equals(b));
    }
}

با javac Yard.java ترجمه کنید، بعد java Yard را اجرا کنید. صفحه اول false بعد true را نشان می‌دهد. بررسی == می‌پرسد آیا a و b دقیقاً همان شیء در حافظه‌اند. دو فراخوانی new String("red") دو شیء می‌سازند، پس == مقدار false چاپ می‌کند. بررسی equals هنوز به نویسه‌ها نگاه می‌کند، پس true چاپ می‌کند.
دو سطر داخل main را یک‌بار دیگر بخوانید. سطر اول: هویت با ==. سطر دوم: محتوا با equals. برای این شکل تدریس هر دو چاپ را نگه دارید تا تضاد روی یک صفحه بماند. اگر فقط == را چاپ کنید، جور بودن محتوایی را که این صفحه هم تدریس می‌کند از دست می‌دهید.
روی literalهای مبتدی مثل "red" بدون new، Java ممکن است همان شیء pooled را بازاستفاده کند، پس == گاهی اتفاقی true به نظر برسد. این دموی دوم عمداً new String("red") به کار می‌برد تا بررسی هویت روشن false بماند در حالی که محتوا true می‌ماند. وقتی به متن اهمیت می‌دهید equals را ترجیح دهید.
اگر دموهای polymorphism هنوز نزدیک‌اند، به‌عنوان تاریخ نگه دارید. برای این درس فایل تدریس equals را اجرا کنید تا صفحه boolean نشان دهد، نه واژه‌های horn. اگر javac از کلاس عمومی تکراری شکایت کرد، فقط Yard را public نگه دارید.

مقایسه با فراخوانی‌های polymorphism

در صفحهٔ polymorphism، یک نام متد از طریق متغیرهای typed والد بدنه‌های متفاوت اجرا کرد. در این صفحه یک نام متد — equals — جواب می‌دهد آیا دو رشته همان متن را دارند، و == جواب می‌دهد آیا همان شیء هستند. هنوز Yard.java را ترجمه می‌کنید و java Yard را اجرا می‌کنید. توکن‌های تازه equals، چاپ‌های boolean از نوع true / false، و تضاد == با new String هستند.
اگر هنوز فایل Machine t = new Truck() باز است، فراخوانی‌های horn می‌بینید. به فایل equals بروید تا main رشته بسازد و نتایج مقایسه را چاپ کند. دموهای ابزار debugging را از این صفحه بیرون بگذارید. ورودی صفحه‌کلید را از این صفحه بیرون بگذارید.

این صفحه برای debugging چه می‌گذارد

این صفحه محتوای رشته را مقایسه می‌کند و نشان می‌دهد چرا == پیش‌فرض غلط برای متن است. صفحهٔ بعد debugging را نشان می‌دهد، جایی که با خواندن دقیق صفحه و منبع می‌فهمید برنامه چرا بد رفتار می‌کند. اینجا با equals و == بمانید. هنوز لازم نیست walkthrough کامل debugger الزامی کنید.
وقتی بعداً یک شاخهٔ غلط را debug می‌کنید، شکست equals علت رایجی است. این صفحه را نیمهٔ مقایسهٔ آن داستان همسایه بدانید. هر دو دموی Yard را تا وقتی true / false و false / true خودکار به نظر برسد تمام کنید، بعد درس debugging را باز کنید.

قبل از debugging

می‌توانید روی متن جور red مقدار a.equals(b) را صدا بزنید و true ببینید، بعد برای blue مقدار false ببینید. می‌توانید دو شیء new String("red") بسازید و ببینید == مقدار false چاپ می‌کند در حالی که equals مقدار true چاپ می‌کند. برای هر دموی نگهداشته Yard.java را ترجمه کنید و java Yard را اجرا کنید. جور بودن محتوا و هویت شیء جدا ماندند. صفحهٔ بعد debugging است، جایی که اشتباه‌ها را با صفحه و منبع کنار هم شکار می‌کنید.
دموی سه‌رشته با equals را برای بررسی روشن محتوا نگه دارید. دموی new String را برای تضاد روشن == نگه دارید. فایل‌های debugging را از این صفحه بیرون بگذارید. این سه عادت ایست بازرسی قبل از جلو رفتن‌اند. وقتی equals برای متن جور true چاپ می‌کند — و وقتی == برای دو شیء تازه با آن متن false چاپ می‌کند — این درس کارش را کرده و برای موضوع بعدی دربارهٔ debugging آماده‌اید.
یک‌بار آخر پوشه را ببینید: یک Yard عمومی، مقایسه‌های رشته در main، بدون انتظار صفحه‌کلید، بدون اجبار به debugger. یک‌بار دیگر روی دموی باز javac Yard.java و java Yard را اجرا کنید. اگر صفحه هنوز booleanهایی را که انتظار دارید چاپ می‌کند، داستان مقایسه محکم است و دوره می‌تواند در صفحهٔ بعد به debugging برود.

🧠 دانش خود را بیازمایید

آماده شروع

دانش خود را بیازمایید

خود را با این آزمون تعاملی به چالش بکشید و ببینید موضوع را چقدر خوب درک کرده‌اید

❓
6
سوالات
🎯
70%
برای قبولی
♾️
∞
زمان
🔄
∞
تلاش‌ها

📝 دستورالعمل‌ها

  • هر سوال را با دقت بخوانید
  • بهترین پاسخ را برای هر سوال انتخاب کنید
  • می‌توانید آزمون را هر چند بار که می‌خواهید تکرار کنید
  • پیشرفت شما در بالا نمایش داده می‌شود