حالا که یاد گرفتهاید چگونه متغیرها را اعلام و مقداردهی اولیه کنید، احتمالاً میخواهید بدانید چگونه با آنها کاری انجام دهید. یادگیری عملگرهای زبان جاوا نقطه شروع خوبی است. عملگرها نمادهای خاصی هستند که عملیات مشخصی روی یک، دو یا سه عملوند انجام میدهند و نتیجه برمیگردانند.
جدول اولویت عملگرها (از بالا به پایین = اولویت بالا به پایین):
| دسته | عملگرها |
|---|---|
| Postfix | expr++ expr-- |
| Unary | ++expr --expr +expr -expr ~ ! |
| Multiplicative | * / % |
| Additive | + - |
| Shift | << >> >>> |
| Relational | < > <= >= instanceof |
| Equality | == != |
| Bitwise AND | & |
| Bitwise XOR | ^ |
| Bitwise OR | | |
| Logical AND | && |
| Logical OR | || |
| Ternary | ? : |
| Assignment | = += -= *= /= %= &= ^= |= <<= >>= >>>= |
در برنامهنویسی عمومی، برخی عملگرها بیشتر از بقیه ظاهر میشوند؛ مثلاً عملگر انتساب = بسیار رایجتر از عملگر جابهجایی راست بدون علامت >>> است. بحث زیر ابتدا روی عملگرهایی تمرکز میکند که به احتمال زیاد بهطور منظم استفاده خواهید کرد و با عملگرهای کمرایجتر پایان مییابد.
یکی از رایجترین عملگرهایی که با آن مواجه خواهید شد، عملگر انتساب ساده = است. این عملگر مقدار سمت راست را به عملوند سمت چپ اختصاص میدهد:
int cadence = 0;
int speed = 0;
int gear = 1;
این عملگر همچنین میتواند روی اشیا برای اختصاص ارجاعات شی استفاده شود.
زبان جاوا عملگرهایی برای جمع، تفریق، ضرب و تقسیم فراهم میکند. تنها نمادی که ممکن است جدید به نظر برسد % است که یک عملوند را بر دیگری تقسیم و باقیمانده را به عنوان نتیجه برمیگرداند.
| عملگر | توضیح |
|---|---|
+ | عملگر جمع (همچنین برای اتصال String) |
- | عملگر تفریق |
* | عملگر ضرب |
/ | عملگر تقسیم |
% | عملگر باقیمانده |
class ArithmeticDemo {
public static void main(String[] args) {
int result = 1 + 2;
System.out.println("1 + 2 = " + result); // 3
result = result - 1;
System.out.println("2 - 1 = " + result); // 2
result = result * 2;
System.out.println("2 * 2 = " + result); // 4
result = result / 2;
System.out.println("4 / 2 = " + result); // 2
result = result + 8;
result = result % 3;
System.out.println("10 % 3 = " + result); // 1
}
}
همچنین میتوانید عملگرهای حسابی را با عملگر انتساب ساده ترکیب کردن عملیات ترکیبی ایجاد کنید. مثلاً x += 1; و x = x + 1; هر دو مقدار x را ۱ واحد افزایش میدهند.
عملگر + همچنین برای اتصال (Join) دو رشته به هم قابل استفاده است:
class ConcatDemo {
public static void main(String[] args) {
String firstString = "This is";
String secondString = " a concatenated string.";
String thirdString = firstString + secondString;
System.out.println(thirdString);
}
}
خروجی: This is a concatenated string.
عملگرهای یکانه فقط به یک عملوند نیاز دارند و عملیات مختلفی مانند افزایش/کاهش مقدار، نفی عبارت یا معکوس کردن مقدار boolean انجام میدهند.
| عملگر | توضیح |
|---|---|
+ | عملگر یکانه مثبت — مقدار مثبت را نشان میدهد (اعداد بدون این هم مثبت هستند) |
- | عملگر یکانه منفی — یک عبارت را نفی میکند |
++ | عملگر افزایش — مقدار را ۱ واحد افزایش میدهد |
-- | عملگر کاهش — مقدار را ۱ واحد کاهش میدهد |
! | عملگر مکمل منطقی — مقدار boolean را معکوس میکند |
عملگرهای افزایش/کاهش را میتوان قبل از عملوند (prefix) یا بعد از آن (postfix) اعمال کرد. کد result++; و ++result; هر دو در نهایت result را ۱ واحد افزایش میدهند. تفاوت این است که نسخه prefix (++result) مقدار افزایشیافته را ارزیابی میکند، در حالی که نسخه postfix (result++) مقدار اصلی را ارزیابی میکند. اگر فقط افزایش/کاهش ساده انجام میدهید، فرقی نمیکند. اما اگر در بخشی از یک عبارت بزرگتر استفاده کنید، نسخهای که انتخاب میکنید ممکن است تفاوت قابل توجهی ایجاد کند.
عملگرهای برابری و رابطهای مشخص میکنند آیا یک عملوند بزرگتر، کوچکتر، برابر یا نابرابر با عملوند دیگر است. بیشتر این عملگرها آشنا به نظر میرسند. به یاد داشته باشید هنگام آزمایش برابری دو مقدار اولیه باید از == و نه = استفاده کنید.
| عملگر | توضیح |
|---|---|
== | برابر با |
!= | نابرابر با |
> | بزرگتر از |
>= | بزرگتر یا مساوی |
< | کوچکتر از |
<= | کوچکتر یا مساوی |
class ComparisonDemo {
public static void main(String[] args) {
int value1 = 1;
int value2 = 2;
if (value1 == value2)
System.out.println("value1 == value2");
if (value1 != value2)
System.out.println("value1 != value2"); // چاپ میشود
if (value1 > value2)
System.out.println("value1 > value2");
if (value1 < value2)
System.out.println("value1 < value2"); // چاپ میشود
if (value1 <= value2)
System.out.println("value1 <= value2"); // چاپ میشود
}
}
عملگرهای && و || عملیات AND شرطی و OR شرطی روی دو عبارت boolean انجام میدهند. این عملگرها رفتار «مدار کوتاه» نشان میدهند، یعنی عملوند دوم فقط در صورت نیاز ارزیابی میشود.
| عملگر | توضیح |
|---|---|
&& | AND شرطی |
|| | OR شرطی |
class ConditionalDemo1 {
public static void main(String[] args) {
int value1 = 1;
int value2 = 2;
if ((value1 == 1) && (value2 == 2))
System.out.println("value1 is 1 AND value2 is 2");
if ((value1 == 1) || (value2 == 1))
System.out.println("value1 is 1 OR value2 is 1");
}
}
عملگر شرطی دیگر ?: است که کوتاهنویسی دستور if-then-else است. این عملگر به عنوان عملگر سهعملوندی (Ternary) شناخته میشود چون از سه عملوند استفاده میکند:
int someCondition = 1;
int value1 = 1;
int value2 = 2;
int result = (someCondition == 1) ? value1 : value2;
System.out.println(result); // 1
اگر someCondition true باشد، مقدار value1 به result اختصاص داده میشود. در غیر این صورت، مقدار value2 اختصاص داده میشود.
عملگر instanceof یک شی را با نوع مشخصشده مقایسه میکند. میتوانید با آن آزمایش کنید آیا شی نمونهای از کلاس، نمونهای از Subclass یا نمونهای از کلاسی است که Interface خاصی را پیادهسازی میکند.
class Parent {}
interface MyInterface {}
class Child extends Parent implements MyInterface {}
class InstanceofDemo {
public static void main(String[] args) {
Parent obj = new Child();
System.out.println("obj instanceof Parent: " + (obj instanceof Parent)); // true
System.out.println("obj instanceof Child: " + (obj instanceof Child)); // true
System.out.println("obj instanceof MyInterface: " + (obj instanceof MyInterface)); // true
}
}
نکته: هنگام استفاده از
instanceofبه یاد داشته باشیدnullنمونه هیچ چیزی نیست.
زبان جاوا همچنین عملگرهایی برای انجام عملیات بیتی و جابهجایی بیت روی انواع عددی فراهم میکند. این عملگرها کمتر رایج هستند.
~: الگوی باینری را معکوس میکند — هر «۰» را «۱» و هر «۱» را «۰» میکند. مثلاً یک byte حاوی ۸ بیت است؛ اعمال این عملگر روی مقداری با الگوی 00000000 الگوی آن را به 11111111 تغییر میدهد.<<: الگوی باینری را به چپ جابهجا میکند.>>: الگوی باینری را به راست جابهجا میکند.>>>: صفر را به موقعیت سمت چپ وارد میکند، در حالی که موقعیت سمت چپ پس از >> به انتشار علامت بستگی دارد.&: عملیات AND بیتی انجام میدهد.^: عملیات XOR بیتی انجام میدهد.|: عملیات OR بیتی انجام میدهد.class BitDemo {
public static void main(String[] args) {
int a = 0b1010; // 10
int b = 0b0010; // 2
System.out.println("a & b = " + (a & b)); // 2 (0010)
System.out.println("a | b = " + (a | b)); // 10 (1010)
System.out.println("a ^ b = " + (a ^ b)); // 8 (1000)
System.out.println("~a = " + (~a)); // -11
System.out.println("a << 1 = " + (a << 1)); // 20 (10100)
System.out.println("a >> 1 = " + (a >> 1)); // 5 (101)
}
}
این محتوا کاملا رایگان توسط تیم کدلپر ترجمه شده و در اختیار شما کاربران عزیز قرار گرفته است، هر گونه کپی برداری برای مقاصد غیر رایگان و بدون ذکر منبع، مورد پیگیری قانونی قرار میگیرد.
ترجمه شده از منبع: https://dev.java/learn/