شنبه ۲۹ دي ۱۴۰۳
Tut24 آموزش برنامه نویسی و مجله تخصصی فناوری ورود/عضویت

آموزش جاوا - عملگرهای پایه

جاوا مجموعه‌ای از عملگرها برای تغییر متغیرها را فراهم می‌کند. ما می‌توانیم همه عملگرهای جاوا را به گروه‌های زیر تقسیم کنیم:

  • عملگرهای حسابی
  • عملگرهای رابطه‌ای
  • عملگرهای بیتی
  • عملگرهای منطقی
  • عملگرهای اختصاص
  • عملگرهای متفرقه

عملگرهای حسابی

عملگرهای حسابی در عبارات ریاضی به همان روشی استفاده می‌شوند که در جبر استفاده می‌شوند. جدول زیر عملگرهای حسابی را نشان می‌دهد:

فرض کنید متغیر صحیح A مقدار ۱۰ و متغیر B مقدار ۲۰ را دارند، آنگاه:

نمونه‌ها را نشان بده

عملگر توضیحات نمونه
+ مقادیر دو طرف از عملگر را جمع می‌کند. A + B برابر با ۳۰ خواهد بود
- از عملوند سمت راست عملوند سمت چپ را کم می‌کند. A - B برابر با -۱۰ خواهد بود
* مقادیر دو طرف از عملگر را در هم ضرب می‌کند. A * B برابر با ۲۰۰ خواهد بود
/ عملوند سمت چپ را بر عملوند سمت راست تقسیم می‌کند. B / A برابر با ۲ خواهد بود
% عملوند سمت چپ را بر عملوند سمت راست تقسیم می‌کند و باقیمانده را برمی‌گرداند. B % A برابر با ۰ خواهد بود
++ مقدار عملوند را یک واحد افزایش می‌دهد. B++ برابر با ۲۱ خواهد بود
-- مقدار عملوند را یک واحد کاهش می‌دهد. B-- برابر با ۱۹ خواهد بود

عملگرهای رابطه‌ای

فرض کنید متغیر A مقدار ۱۰ و متغیر B مقدار ۲۰ را دارند، آنگاه:

نمونه‌ها را نشان بده

عملگر توضیحات نمونه
== (برابر با) بررسی می‌کند که مقدار دو عملوند برابر است یا نه، اگر بله، شرط درست می‌شود. (A == B) درست نیست.
!= (نامساوی) بررسی می‌کند که مقدار دو عملوند برابر است یا نه، اگر مقادیر برابر نباشند، شرط درست می‌شود. (A != B) درست است.
> (بزرگتر از) بررسی می‌کند که مقدار عملوند سمت چپ بزرگتر است از مقدار عملوند سمت راست یا نه، اگر بله، شرط درست می‌شود. (A > B) درست نیست.
< (کوچکتر از) بررسی می‌کند که مقدار عملوند سمت چپ کوچکتر است از مقدار عملوند سمت راست یا نه، اگر بله، شرط درست می‌شود. (A < B) درست است.
>= (بزرگتر مساوی با) بررسی می‌کند که مقدار عملوند سمت چپ بزرگتر یا مساوی است با مقدار عملوند سمت راست یا نه، اگر بله، شرط درست می‌شود. (A >= B) درست نیست.
<= (کوچکتر مساوی با) بررسی می‌کند که مقدار عملوند سمت چپ کوچکتر یا مساوی است با مقدار عملوند سمت راست یا نه، اگر بله، شرط درست می‌شود. (A <= B) درست است.

عملگرهای بیتی

جاوا چندین عملگر بیتی را تعریف می‌کند که می‌توانند بر روی انواع صحیح، long، int، short، char و byte اعمال شوند.

عملگر بیتی بر روی بیت‌ها عمل می‌کند و عملیات بیت به بیت انجام می‌دهد. فرض کنید a = ۶۰ و b = ۱۳ باشد؛ حالا به صورت باینری به صورت زیر خواهند بود:

a = ۰۰۱۱ ۱۱۰۰

b = ۰۰۰۰ ۱۱۰۱

-----------------

a&b = ۰۰۰۰ ۱۱۰۰

a|b = ۰۰۱۱ ۱۱۰۱

a^b = ۰۰۱۱ ۰۰۰۱

~a  = ۱۱۰۰ ۰۰۱۱

جدول زیر عملگرهای بیتی را نشان می‌دهد:

فرض کنید متغیر صحیح A مقدار ۶۰ و متغیر B مقدار ۱۳ را دارند، آنگاه:

نمونه‌ها را نشان بده

عملگر توضیحات نمونه
& (بیتی و) عملگر بایتی و، یک بیت را به نتیجه منتقل می‌کند اگر در هر دو عملوند وجود داشته باشد. (A & B) عدد ۱۲ را که به صورت ۰۰۰۰ ۱۱۰۰ است را برمی‌گرداند.
| (بیتی یا) عملگر بایتی یا، یک بیت را کپی می‌کند اگر در هر کدام از عملوندها وجود داشته باشد. (A | B) عدد ۶۱ را که به صورت ۰۰۱۱ ۱۱۰۱ است را برمی‌گرداند.
^ (بیتی XOR) عملگر بایتی XOR، یک بیت را کپی می‌کند اگر در یکی از عملوندها مقداردهی شده باشد اما در هر دو عملوند وجود نداشته باشد. (A ^ B) عدد ۴۹ را که به صورت ۰۰۱۱ ۰۰۰۱ است را برمی‌گرداند.
~ (مکمل بیتی) عملگر تکمیل معکوس بیتی، یکانی است و تاثیری از "برعکس کردن" بیت‌ها دارد. (~A ) عدد -۶۱ را که به صورت ۱۱۰۰ ۰۰۱۱ در قالب عدد باینری با عدد اعشاری منفی است به دلیل عدد باینری با اعداد منفی.
<< (شیفت چپ) عملگر شیفت چپ باینری، مقدار عملوند سمت چپ را به چپ به تعداد بیت‌های مشخص شده توسط عملوند سمت راست منتقل می‌کند. A << ۲ عدد ۲۴۰ را که به صورت ۱۱۱۱ ۰۰۰۰ است را برمی‌گرداند.
>> (شیفت راست) عملگر شیفت راست باینری، مقدار عملوند سمت چپ را به راست به تعداد بیت‌های مشخص شده توسط عملوند سمت راست منتقل می‌کند. A >> ۲ عدد ۱۵ را که به صورت ۱۱۱۱ است را برمی‌گرداند.
>>> (شیفت راست پر با صفر) عملگر شیفت راست پر با صفر، مقدار عملوند سمت چپ را به راست به تعداد بیت‌های مشخص شده توسط عملوند سمت راست منتقل می‌کند و مقادیر شیفت داده شده با صفر پر می‌شوند. A >>>۲ عدد ۱۵ را که به صورت ۰۰۰۰ ۱۱۱۱ است را برمی‌گرداند.

عملگرهای منطقی

جدول زیر عملگرهای منطقی را نشان می‌دهد:

فرض کنید متغیرهای منطقی A برابر true و متغیر B برابر false باشند، آنگاه:

نمونه‌ها را نشان بده

عملگر توضیحات نمونه
&& (منطقی و) عملگر منطقی AND نامیده می‌شود. اگر هر دو عملوند غیر صفر باشند، شرط درست می‌شود. (A && B) نامنطقی است
|| (منطقی یا) عملگر منطقی OR نامیده می‌شود. اگر هر دو عملوند غیر صفر باشند، شرط درست می‌شود. (A || B) درست است
! (منطقی نه) عملگر منطقی NOT نامیده می‌شود. برای معکوس کردن وضعیت منطقی عملوند خود استفاده می‌شود. اگر یک شرط درست باشد، عملگر منطقی NOT آن را نامنطقی می‌کند. !(A && B) درست است

عملگرهای اختصاصی

عملگرهای اختصاصی پشتیبانی شده توسط زبان جاوا عبارتند از:

نمونه‌ها را نشان بده

عملگر توضیحات نمونه
= عملگر اختصاص ساده است. ارزش‌ها را از عملوند سمت راست به عملوند سمت چپ اختصاص می‌دهد. C = A + B مقدار A + B را در C اختصاص می‌دهد
+= عملگر افزودن و اختصاص. عملوند سمت راست را به عملوند سمت چپ اضافه کرده و نتیجه را به عملوند سمت چپ اختصاص می‌دهد. C += A معادل C = C + A است
-= عملگر کم کردن و اختصاص. عملوند سمت راست را از عملوند سمت چپ کم کرده و نتیجه را به عملوند سمت چپ اختصاص می‌دهد. C -= A معادل C = C - A است
*= عملگر ضرب و اختصاص. عملوند سمت راست را با عملوند سمت چپ ضرب کرده و نتیجه را به عملوند سمت چپ اختصاص می‌دهد. C *= A معادل C = C * A است
/= عملگر تقسیم و اختصاص. عملوند سمت چپ را بر عملوند سمت راست تقسیم کرده و نتیجه را به عملوند سمت چپ اختصاص می‌دهد. C /= A معادل C = C / A است
%= عملگر باقی‌مانده و اختصاص. دو عملوند را باقی‌مانده می‌گیرد و نتیجه را به عملوند سمت چپ اختصاص می‌دهد. C %= A معادل C = C % A است
<<= عملگر شیفت چپ و اختصاص. C <<= 2 همانند C = C << 2 است
>>= عملگر شیفت راست و اختصاص. C >>= 2 همانند C = C >> 2 است
&= عملگر بیتی AND و اختصاص. C &= 2 همانند C = C & 2 است
^= عملگر بیتی XOR و اختصاص. C ^= 2 همانند C = C ^ 2 است
|= عملگر بیتی OR و اختصاص. C |= 2 همانند C = C | 2 است

عملگرهای متفرقه

چندین عملگر دیگر نیز توسط زبان جاوا پشتیبانی می‌شوند.

عملگر شرطی ( ? : )

عملگر شرطی همچنین به عنوان عملگر سه‌خانه‌ای شناخته می‌شود. این عملگر از سه عملوند تشکیل شده است و برای ارزیابی عبارات بولی استفاده می‌شود. هدف از استفاده از این عملگر تصمیم‌گیری برای اختصاص مقدار به متغیر است. این عملگر به صورت زیر نوشته می‌شود:

variable x = (expression) ? value if true : value if false

یک نمونه به شرح زیر است:

نمونه

public class Test {

   public static void main(String args[]) {
      int a, b;
      a = 10;
      b = (a == 1) ? 20: 30;
      System.out.println( "Value of b is : " +  b );

      b = (a == 10) ? 20: 30;
      System.out.println( "Value of b is : " + b );
   }
}

این کد نتیجه زیر را تولید می‌کند:

خروجی

Value of b is : 30
Value of b is : 20

اپراتور instanceof

این اپراتور فقط برای متغیرهای مرجع شیء استفاده می‌شود. این اپراتور بررسی می‌کند که آیا شیء از یک نوع خاص (نوع کلاس یا نوع رابط) است یا خیر. اپراتور instanceof به صورت زیر نوشته می‌شود:

( Object reference variable ) instanceof  (class/interface type)

اگر شیء مرجع شده توسط متغیر در سمت چپ از اپراتور، بررسی IS-A را برای نوع کلاس/رابط در سمت راست با موفقیت انجام دهد، نتیجه true خواهد بود. مثالی برای توضیح به شرح زیر است −

مثال

public class Test {

   public static void main(String args[]) {

      String name = "James";

      // following will return true since name is type of String
      boolean result = name instanceof String;
      System.out.println( result );
   }
}

این دستور نتیجه زیر را تولید خواهد کرد −

خروجی

true

اگر شیء مقایسه شده، سازگار با نوعی که در سمت راست قرار دارد، تساوی پذیر باشد، این عامل همچنان true را برمیگرداند. در ادامه یک مثال دیگر آورده شده است −

مثال

class Vehicle {}

public class Car extends Vehicle {

   public static void main(String args[]) {

      Vehicle a = new Car();
      boolean result =  a instanceof Car;
      System.out.println( result );
   }
}

این عمل، نتیجه زیر را تولید خواهد کرد −

خروجی

true

اولویت عملگرهای جاوا

اولویت عملگرها تعیین می‌کند که چگونه عبارات در یک عبارت گروه‌بندی می‌شوند. این تأثیری بر روی ارزیابی عبارت دارد. برخی از عملگرها اولویت بالاتری نسبت به دیگران دارند؛ به عنوان مثال، عملگر ضرب اولویت بالاتری نسبت به عملگر جمع دارد −

به عنوان مثال، x = 7 + 3 * 2; در اینجا x برابر با 13 است، نه 20 زیرا عملگر * اولویت بالاتری نسبت به عملگر + دارد، بنابراین ابتدا با 3 * 2 ضرب می‌شود و سپس به 7 اضافه می‌شود.

در اینجا، عملگرهای با بالاترین اولویت در بالای جدول قرار می‌گیرند و عملگرهای با کمترین اولویت در پایین ظاهر می‌شوند. در یک عبارت، عملگرهای با اولویت بالاتر ابتدا ارزیابی می‌شوند.

دسته‌بندی عملگر رویکرد
پسوندی expression++ expression-- از چپ به راست
یکانی ++expression –-expression +expression –expression ~ ! از راست به چپ
ضرب و تقسیم * / % از چپ به راست
جمع و تفریق + - از چپ به راست
شیفت << >> >>> از چپ به راست
نسبتی < > <= >= instanceof از چپ به راست
برابری == != از چپ به راست
بیتی AND & از چپ به راست
بیتی XOR ^ از چپ به راست
بیتی OR | از چپ به راست
منطقی AND && از چپ به راست
منطقی OR || از چپ به راست
شرطی ?: از راست به چپ
تخصیص = += -= *= /= %= ^= |= <<= >>= >>>= از راست به چپ