کار با اشیاء در جاوا – جلسه 6
1397/02/22 16:06 , بهزاد ناظمی

کار با اشیاء در جاوا – جلسه 6

مقایسه مقادیر و کلاس های اشیاء

علاوه بر جایگذاری، شما معمولا سه فرآیند دیگر که اشیاء را شامل می شوند را انجام می دهید:

  • مقایسه اشیاء
  • پیدا کردن کلاس هر شیء داده شده
  • تست اینکه آیا یک شیء نمونه ای از یک کلاس داده شده است یا خیر

مقایسه اشیاء

در جلسه گذشته ، شما در مورد عملگرها  برای مقایسه مقادیر در حالات  مساوی، غیر مساوی، کمتر  و غیره یاد گرفتید. اکثر این اپراتورها فقط در انواع اولیه، نه در اشیاء کار می کنند. اگر شما سعی کنید از مقادیر دیگری به عنوان عملوند استفاده کنید، کامپایلر جاوا خطا تولید خواهد کرد.

استثنائات این قانون عبارتند از عملگر == برای برابری و عملگر!=  برای نابرابری.

 هنگامی که این قوانین برای اشیاء اعمال می شود، این اپراتورها کاری که شما در ابتدا انتظار دارید را انجام نمی دهند. به جای بررسی اینکه بررسی کنند که آیا یک شیء دارای مقادیر یکسان با دیگری است،  تعیین می کنند که آیا هر دو طرف اپراتور به همان شیء اشاره می کنند یا خیر ؟

برای مقایسه اشیاء یک کلاس و داشتن نتایج معنی دار، شما باید از  روش های ویژه ای در کلاس خود استفاده کنید و متدهای ان را فراخوانی کنید.

مثال خوب برای این کلاس String است. ممکن است دو اشیاء مختلف String که یک متن مشابه را نشان می دهند، داشته باشند. اگر شما عملگر==  را برای مقایسه این اشیاء استفاده می کنید، اما آنها بعنوان نامساوی در نظر گرفته می شوند. اگر چه محتوای آنها مطابقت دارد ولی یک شیء مشابه نیستند.

برای دیدن اینکه آیا دو اشیاء String دارای مقادیر مشابه هستند، یک روش equals () از کلاس استفاده می شود. این روش هر کاراکتر موجود در رشته را آزمایش می کند و اگر دو رشته دارای همان مقدار باشند، جواب مثبت می شود.

برنامه EqualsTester در فهرست 3.5 این را نشان می دهد. برنامه را با NetBeans در بسته com.java21days ایجاد کنید و فایل را با انتخاب File یا کلیک روی دکمه Save All toolbar ذخیره کنید.

فهرست 3.5 - متن کامل EqualsTester.java

1: package com.java21days;
 2:
 3: class EqualsTester {
 4:     public static void main(String[] arguments) {
 5:         String str1, str2;
 6:         str1 = "Boy, that escalated quickly.";
 7:         str2 = str1;
 8:
 9:         System.out.println("String1: " + str1);
10:         System.out.println("String2: " + str2);
11:         System.out.println("Same object? " + (str1 == str2));
12:
13:         str2 = new String(str1);
14:
15:         System.out.println("String1: " + str1);
16:         System.out.println("String2: " + str2);
17:         System.out.println("Same object? " + (str1 == str2));
18:         System.out.println("Same value? " + str1.equals(str2));
19:     }
20: }

خروجی برنامه در شکل 3.6 نشان داده شده است.

 تصویر 3.6 فراخوانی String ، برای یادگیری بیشتر درباره رشته

 

قسمت اول این برنامه دو متغیر را مشخص می کند (str1 و str2)، جمله (Boy, that escalated quickly.) را به  str1 اختصاص می دهد و سپس آن را به str2 (خطوط 5-7) اختصاص می دهد. همانطور که قبلا آموخته بودید str1 و str2 در حال حاضر به همان شیء اشاره می کنند و آزمون برابری در خط 11 این را نشان می دهد.

در قسمت دوم این برنامه، یک شیء String جدید با همان مقدار به عنوان str1 ایجاد می کنید و str2 را به آن شیء String جدید اختصاص دهید.

حالا شما دو شیء  رشته ای متفاوت در str1 و str2 دارید، هر دو با همان مقدار یکسان.

 تست کردن آنها برای دیدن اینکه آیا آنها یک شیء با استفاده از عملگر==  پاسخ مورد انتظار را دریافت می کنند: false (خط 17). آنها یک شیء یکسان در حافظه نیستند. تست آنها با استفاده از روش equals () در خط 18  پاسخ مورد انتظار  true را نشان می دهد که نشان دهنده این است که آنها یک مقدار مشابه دارند.

تعیین کلاس یک شیء

آیا می خواهید نام یک کلاس شیء را متوجه شوید؟ در اینجا چگونگی اختصاص دادن یک متغیر به کلید مشخص می شود:

String name = key.getClass().getName();

متد getClass () در کلاس Object تعریف شده است، بنابراین می توان آن را در تمام اشیاء جاوا فراخوانی نمود. این روش یک شیء Class را بازخوانی می کند که کلاس شیء را نشان می دهد. متد getName () این شیء ، یک رشته که حاوی نام کلاس است را بر میگرداند.

یکی دیگر از آزمون های مفید،( instanceof ) عملگر است که دارای دو عملوند زیر است :

  • یک اشاره به یک شیء در سمت چپ
  • نام یک کلاس در سمت راست

 این عبارت یک مقدارBoolean  را ایجاد می کند: true اگر شیء،  یک نمونه از کلاس نامیده شود یا هر زیر کلاس آن کلاس،  یا در غیر این صورت false می شود.

 مانند این مثال ها:

boolean check1 = "Texas" instanceof String; // true

Object obiwan = new Object();
boolean check2 = obiwan instanceof String; // false

عملگر exampleof همچنین می تواند برای رابط ها استفاده شود. اگر یک شیء یک رابط را پیاده سازی کند، عملگر instanceof  زمانی که این تست انجام می شود، بعنوان خروجی true  می دهد.

برخلاف عملگرهای دیگر در جاوا، instanceof از نوع نشانه گذاری مانند * برای ضرب یا + برای اضافه کردن نیست. در عوض، کلمه کلیدی instanceof عملگر است.

 

  برگرفته از : informit.com

از آخرین دوره های آموزشی و تخفیف ها مطلع شوید

با تکمیل فرم زیر ، از اخبار و اطلاعات به روز برنامه نویسی و تکنولوژی عقب نمانید

آخرین مطالب

آموزش جامع SQL Server (جلسه ۱۲)
آموزش جامع SQL Server (جلسه ۱۲)

دستور UPDATE در SQL Server برای تغییر داده‌های موجود در یک جدول، از دستور UPDATE به شکل زیر استفاده ...

آموزش جامع SQL Server (جلسه ۱۵)
آموزش جامع SQL Server (جلسه ۱۵)

دستور DROP TABLE در SQL Server گاهی، لازم است یک جدول که دیگر استفاده‌ای ندارد را حذف کنید. برای ...

آموزش جامع SQL Server (جلسه ۳۵: Window Functionها – بخش ۲)
آموزش جامع SQL Server (جلسه ۳۵: Window Functionها – بخش ۲)

بخش اول از آخرین مبحث دوره جامع آموزش SQL Server در جلسه قبلی بررسی شد. این مبحث که ...

آخرین دیدگاه ها

دیدگاه خود را درباره این پست بنویسید

فرم ارسال نظرات