หนึ่งในการใช้คอมพิวเตอร์ขั้นพื้นฐานที่สุดคือการดำเนินการทางคณิตศาสตร์ ในฐานะที่เป็นภาษาคอมพิวเตอร์ Java ยังมีชุดตัวดำเนินการที่หลากหลายเพื่อจัดการตัวแปร เราสามารถแบ่งตัวดำเนินการออกเป็นกลุ่มต่างๆ ได้ดังต่อไปนี้:
ตัวดำเนินการทางคณิตศาสตร์ถูกใช้ในนิพจน์ทางคณิตศาสตร์ และทำงานในลักษณะเดียวกับที่ใช้ในทางคณิตศาสตร์ ตารางต่อไปนี้แสดงรายการตัวดำเนินการทางคณิตศาสตร์ทั้งหมด
ตัวอย่างในตารางถือว่าตัวแปรจำนวนเต็ม A มีค่า 10 และตัวแปร B มีค่า 20:
ผู้ดำเนินการ | อธิบาย | ตัวอย่าง |
---|---|---|
- | การบวก – ค่าที่ด้านใดด้านหนึ่งของตัวดำเนินการบวก | A + B เท่ากับ 30 |
- | การลบ - ตัวถูกดำเนินการทางซ้ายลบตัวถูกดำเนินการทางขวา | เอ – บี เท่ากับ -10 |
- | การคูณ - คูณค่าที่ด้านใดด้านหนึ่งของตัวดำเนินการ | A * B เท่ากับ 200 |
- | การหาร - แบ่งตัวถูกดำเนินการทางซ้ายด้วยตัวถูกดำเนินการทางขวา | B/A เท่ากับ 2 |
- | Modulo - ส่วนที่เหลือของตัวถูกดำเนินการทางซ้ายหารด้วยตัวถูกดำเนินการทางขวา | B%A เท่ากับ 0 |
- | ส่วนเพิ่ม - เพิ่มค่าของตัวถูกดำเนินการ 1 | B++ หรือ ++B เท่ากับ 21 |
- | การลดลง - ลดค่าของตัวถูกดำเนินการลง 1 | B-- หรือ --B เท่ากับ 19 |
แม้ว่าทั้งสองค่าจะเพิ่มขึ้นในตัวเอง (ผลการดำเนินงานเท่ากับ B+1) แต่ก็ยังมีความแตกต่างระหว่าง B++ และ ++B ++B คือค่า lvalue และดำเนินการในตำแหน่งโดยตรง (สามารถเข้าใจได้ว่าเป็น + บนตัวแปร B โดยตรง 1) B++ คือค่า rvalue เมื่อทำงานในคอมไพเลอร์ ตัวแปรชั่วคราวจะถูกสร้างขึ้นก่อน จากนั้นตัวแปรชั่วคราวจะถูกนำมาใช้ในการคำนวณ +1 จากนั้นจึงกำหนดให้กับ B
ดังนั้นในโค้ดตัวอย่างด้านล่างนี้ เมื่อพิมพ์ d++ พบว่าผลลัพธ์ไม่เป็น +1 (ขณะนี้ตัวแปร d ถูกพิมพ์ และดำเนินการตัวแปรชั่วคราวของ d) แต่ผลลัพธ์แสดงในการพิมพ์ครั้งถัดไป คำสั่งคือ +1 อีกครั้ง ผลลัพธ์สุดท้าย (ค่าของตัวแปรชั่วคราวถูกกำหนดให้กับตัวแปร d) ผลลัพธ์ของการพิมพ์ ++d คือ +1 โดยตรง
โปรแกรมตัวอย่างง่ายๆ ต่อไปนี้สาธิตตัวดำเนินการทางคณิตศาสตร์ คัดลอกและวางโปรแกรม Java ต่อไปนี้และบันทึกเป็นไฟล์ Test.java จากนั้นคอมไพล์และรันโปรแกรม:
public class Test { public static void main(String args[]) { int a = 10; int b = 20; int c = 25; int d = 25; System.out.println("a + b = " + (a + b) ); System.out.println("a - b = " + (a - b) ); System.out.println("a * b = " + (a * b) ); System.out.println("b / a = " + (b / a) ); System.out.println("b % a = " + (b % a) ); System.out.println("c % a = " + (c % a) ); System.out.println("a++ = " + (a++) ); System.out.println("a-- = " + (a--) ); // 查看d++ 与++d 的不同System.out.println("d++ = " + (d++) ); System.out.println("d = " + d); System.out.println("++d = " + (++d) ); } }
ผลการรวบรวมและการทำงานของตัวอย่างข้างต้นมีดังนี้:
a + b = 30 a - b = -10 a * b = 200 b / a = 2 b % a = 0 c % a = 5 a++ = 10 a-- = 11 d++ = 25 d =26 ++d = 27
ตารางต่อไปนี้แสดงตัวดำเนินการเชิงสัมพันธ์ที่ Java รองรับ
ตัวอย่างตัวแปรจำนวนเต็ม A ในตารางมีค่า 10 และตัวแปร B มีค่า 20:
ตัวดำเนินการ | อธิบาย | ตัวอย่าง |
---|---|---|
- | ตรวจสอบว่าค่าของตัวถูกดำเนินการทั้งสองเท่ากันหรือไม่ หากเป็นเช่นนั้นเงื่อนไขจะเป็นจริง | (A == B) เป็นเท็จ (ไม่เป็นความจริง) |
- | ตรวจสอบว่าค่าของตัวถูกดำเนินการสองตัวเท่ากันหรือไม่ หากค่าไม่เท่ากันแสดงว่าเงื่อนไขเป็นจริง | (A != B) เป็นจริง |
- | ตรวจสอบว่าค่าของตัวถูกดำเนินการทางซ้ายมากกว่าค่าของตัวถูกดำเนินการทางขวาหรือไม่ หากเป็นเช่นนั้น เงื่อนไขจะกลายเป็นจริง | (A>B) ไม่เป็นความจริง |
- | ตรวจสอบว่าค่าของตัวถูกดำเนินการทางซ้ายน้อยกว่าค่าของตัวถูกดำเนินการทางขวา หากเป็นเช่นนั้น เงื่อนไขจะกลายเป็นจริง | (A < B) เป็นจริง |
- | ตรวจสอบว่าค่าของตัวถูกดำเนินการทางซ้ายมากกว่าหรือเท่ากับค่าของตัวถูกดำเนินการทางขวา หากเป็นเช่นนั้นเงื่อนไขจะกลายเป็นจริง | (A>=B) เป็นเท็จ |
- | ตรวจสอบว่าค่าของตัวถูกดำเนินการทางซ้ายน้อยกว่าหรือเท่ากับค่าของตัวถูกดำเนินการทางขวา หากเป็นเช่นนั้นเงื่อนไขจะกลายเป็นจริง | (A <= B) เป็นจริง |
โปรแกรมตัวอย่างง่ายๆ ต่อไปนี้สาธิตตัวดำเนินการเชิงสัมพันธ์ คัดลอกและวางโปรแกรม Java ต่อไปนี้และบันทึกเป็นไฟล์ Test.java จากนั้นคอมไพล์และรันโปรแกรม:
public class Test { public static void main(String args[]) { int a = 10; int b = 20; System.out.println("a == b = " + (a == b) ); System.out.println("a != b = " + (a != b) ); System.out.println("a > b = " + (a > b) ); System.out.println("a < b = " + (a < b) ); System.out.println("b >= a = " + (b >= a) ); System.out.println("b <= a = " + (b <= a) ); } }
ผลการรวบรวมและการทำงานของตัวอย่างข้างต้นมีดังนี้:
a == b = false a != b = true a > b = false a < b = true b >= a = true b <= a = false
Java กำหนดตัวดำเนินการระดับบิต ซึ่งใช้กับประเภทจำนวนเต็ม (int) จำนวนเต็มยาว (ยาว) จำนวนเต็มสั้น (สั้น) ประเภทอักขระ (อักขระ) และประเภทไบต์ (ไบต์)
ตัวดำเนินการระดับบิตดำเนินการกับบิตทั้งหมดและดำเนินการในระดับบิต สมมติว่า a = 60 และ b = 13; การแสดงรูปแบบไบนารี่จะเป็นดังนี้:
A = 0011 1100 B = 0000 1101 ----------------- A&B = 0000 1100 A | B = 0011 1101 A ^ B = 0011 0001 ~A= 1100 0011
ตารางต่อไปนี้แสดงรายการการดำเนินการพื้นฐานของตัวดำเนินการระดับบิต โดยสมมติว่าตัวแปรจำนวนเต็ม A มีค่า 60 และตัวแปร B มีค่า 13:
ผู้ดำเนินการ | อธิบาย | ตัวอย่าง |
---|---|---|
- | ตัวดำเนินการระดับบิต AND ผลลัพธ์จะเป็น 1 ก็ต่อเมื่อบิตบางตัวของตัวถูกดำเนินการทั้งสองไม่ใช่ 0 | (A&B) ได้ 12 ซึ่งก็คือ 0000 1100 |
- | ตัวดำเนินการ Bitwise OR ตราบใดที่บิตหนึ่งของตัวถูกดำเนินการทั้งสองมีค่าที่ไม่ใช่ 0 ผลลัพธ์จะเป็น 1 | (A | B) ได้ 61 ซึ่งก็คือ 0011 1101 |
- | ตัวดำเนินการ Bitwise XOR เมื่อบิตหนึ่งของตัวถูกดำเนินการทั้งสองต่างกัน บิตผลลัพธ์จะเป็น 1 | (A^B) ให้ 49 ซึ่งก็คือ 0011 0001 |
- | ตัวดำเนินการเสริมระดับบิตจะพลิกแต่ละบิตของตัวถูกดำเนินการ | (~A) ได้รับ -61 ซึ่งก็คือ 1100 0011 |
- | ตัวดำเนินการเลื่อนไปทางซ้ายระดับบิต ตัวถูกดำเนินการทางซ้ายจะถูกเลื่อนไปทางซ้ายตามจำนวนบิตที่ระบุโดยตัวถูกดำเนินการทางขวา | A << 2 ให้ค่า 240 แก่เรา ซึ่งก็คือ 1111 0000 |
- | ตัวดำเนินการเลื่อนไปทางขวาระดับบิต ตัวถูกดำเนินการด้านซ้ายจะถูกเลื่อนไปทางขวาตามจำนวนบิตที่ระบุโดยตัวถูกดำเนินการด้านขวา | A >> 2 ได้ 15 ซึ่งก็คือ 1111 |
- | ตัวดำเนินการเติมศูนย์เลื่อนไปทางขวาระดับบิต ค่าของตัวถูกดำเนินการทางซ้ายจะเลื่อนไปทางขวาตามจำนวนบิตที่ระบุโดยตัวถูกดำเนินการทางขวา และตำแหน่งงานว่างที่เป็นผลลัพธ์จะเต็มไปด้วยศูนย์ | A >>> 2 ได้ 15 ซึ่งก็คือ 0000 1111 |
โปรแกรมตัวอย่างง่ายๆ ต่อไปนี้สาธิตตัวดำเนินการระดับบิต คัดลอกและวางโปรแกรม Java ต่อไปนี้และบันทึกเป็นไฟล์ Test.java จากนั้นคอมไพล์และรันโปรแกรม:
public class Test { public static void main(String args[]) { int a = 60; /* 60 = 0011 1100 */ int b = 13; /* 13 = 0000 1101 */ int c = 0; c = a & b; /* 12 = 0000 1100 */ System.out.println("a & b = " + c ); c = a | b; /* 61 = 0011 1101 */ System.out.println("a | b = " + c ); c = a ^ b; /* 49 = 0011 0001 */ System.out.println("a ^ b = " + c ); c = ~a; /*-61 = 1100 0011 */ System.out.println("~a = " + c ); c = a << 2; /* 240 = 1111 0000 */ System.out.println("a << 2 = " + c ); c = a >> 2; /* 215 = 1111 */ System.out.println("a >> 2 = " + c ); c = a >>> 2; /* 215 = 0000 1111 */ System.out.println("a >>> 2 = " + c ); } }
ผลการรวบรวมและการทำงานของตัวอย่างข้างต้นมีดังนี้:
a & b = 12 a | b = 61 a ^ b = 49 ~a = -61 a << 2 = 240 a >> 2 = 15 a >>> 2 = 15
ตารางต่อไปนี้แสดงรายการการดำเนินการพื้นฐานของตัวดำเนินการเชิงตรรกะ โดยสมมติว่าตัวแปรบูลีน A เป็นจริง และตัวแปร B เป็นเท็จ
ผู้ดำเนินการ | อธิบาย | ตัวอย่าง |
---|---|---|
- | เรียกว่าตัวดำเนินการ AND แบบลอจิคัล เงื่อนไขจะเป็นจริงก็ต่อเมื่อตัวถูกดำเนินการทั้งสองเป็นจริงเท่านั้น | (A && B) เป็นเท็จ |
- | เรียกว่าตัวดำเนินการตรรกะหรือ เงื่อนไขจะเป็นจริงหากตัวถูกดำเนินการตัวใดตัวหนึ่งเป็นจริง | (A | | B) เป็นจริง |
- | เรียกว่าตัวดำเนินการ NOT แบบลอจิคัล ใช้เพื่อกลับสถานะตรรกะของตัวถูกดำเนินการ หากเงื่อนไขเป็นจริง ตัวดำเนินการ NOT แบบลอจิคัลจะได้รับค่าเท็จ | - (A&& B) เป็นจริง |
โปรแกรมตัวอย่างง่ายๆ ต่อไปนี้สาธิตตัวดำเนินการเชิงตรรกะ คัดลอกและวางโปรแกรม Java ต่อไปนี้และบันทึกเป็นไฟล์ Test.java จากนั้นคอมไพล์และรันโปรแกรม:
public class Test { public static void main(String args[]) { boolean a = true; boolean b = false; System.out.println("a && b = " + (a&&b)); System.out.println("a || b = " + (a||b) ); System.out.println("!(a && b) = " + !(a && b)); } }
ผลการรวบรวมและการทำงานของตัวอย่างข้างต้นมีดังนี้:
a && b = false a || b = true !(a && b) = true
ต่อไปนี้คือตัวดำเนินการที่ได้รับมอบหมายซึ่งสนับสนุนโดยภาษา Java:
ผู้ดำเนินการ | อธิบาย | ตัวอย่าง |
---|---|---|
- | ตัวดำเนินการกำหนดอย่างง่าย กำหนดค่าของตัวถูกดำเนินการทางขวาให้กับตัวถูกดำเนินการทางซ้าย | 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 |
- | Modulo และตัวดำเนินการกำหนด ซึ่ง modulo ตัวถูกดำเนินการด้านซ้ายและขวา และกำหนดค่าให้กับตัวถูกดำเนินการด้านซ้าย | C%=A เทียบเท่ากับ C=C%A |
- | ผู้ดำเนินการกำหนดกะซ้าย | C << = 2 เทียบเท่ากับ C = C << 2 |
- | ผู้ดำเนินการกำหนดกะขวา | C >> = 2 เทียบเท่ากับ C = C >> 2 |
- | ตัวดำเนินการกำหนดระดับบิตและ | C&=2 เทียบเท่ากับ C=C&2 |
- | ตัวดำเนินการกำหนด Bitwise XOR | C^=2 เทียบเท่ากับ C=C^2 |
- | ตัวดำเนินการกำหนด Bitwise หรือ | C|=2 เทียบเท่ากับ C=C|2 |
โปรแกรมตัวอย่างง่ายๆ ต่อไปนี้สาธิตผู้ปฏิบัติงานที่ได้รับมอบหมาย คัดลอกและวางโปรแกรม Java ต่อไปนี้และบันทึกเป็นไฟล์ Test.java จากนั้นคอมไพล์และรันโปรแกรม:
public class Test { public static void main(String args[]) { int a = 10; int b = 20; int c = 0; c = a + b; System.out.println("c = a + b = " + c ); c += a ; System.out.println("c += a = " + c ); c -= a ; System.out.println("c -= a = " + c ); c *= a ; System.out.println("c *= a = " + c ); a = 10; c = 15; c /= a ; System.out.println("c /= a = " + c ); a = 10; c = 15; c %= a ; System.out.println("c %= a = " + c ); c <<= 2 ; System.out.println("c <<= 2 = " + c ); c >>= 2 ; System.out.println("c >>= 2 = " + c ); c >>= 2 ; System.out.println("c >>= a = " + c ); c &= a ; System.out.println("c &= a= " + c ); c ^= a ; System.out.println("c ^= a= " + c ); c |= a ; System.out.println("c |= a= " + c ); } }
ผลการรวบรวมและการทำงานของตัวอย่างข้างต้นมีดังนี้:
c = a + b = 30 c += a = 40 c -= a = 30 c *= a = 300 c /= a = 1 c %= a = 5 c <<= 2 = 20 c >>= 2 = 5 c >>= 2 = 1 c &= a = 0 c ^= a = 10 c |= a = 10
ตัวดำเนินการแบบมีเงื่อนไขเรียกอีกอย่างว่าตัวดำเนินการแบบไตรภาค โอเปอเรเตอร์นี้มีตัวถูกดำเนินการสามตัวและจำเป็นต้องประเมินค่าของนิพจน์บูลีน วัตถุประสงค์หลักของตัวดำเนินการนี้คือเพื่อตัดสินใจว่าควรกำหนดค่าใดให้กับตัวแปร
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 ถูกใช้ในรูปแบบต่อไปนี้:
( Object reference variable ) instanceof (class/interface type)
หากวัตถุที่ชี้ไปโดยตัวแปรทางด้านซ้ายของตัวดำเนินการนั้นเป็นวัตถุของคลาสหรืออินเทอร์เฟซ (คลาส/อินเทอร์เฟซ) ทางด้านขวาของตัวดำเนินการ ผลลัพธ์จะเป็นจริง
นี่คือตัวอย่าง:
String name = 'James'; boolean result = name instanceof String; // 由于name是String类型,所以返回真
โอเปอเรเตอร์นี้ยังคงคืนค่าเป็นจริงหากอ็อบเจ็กต์ที่เปรียบเทียบเข้ากันได้กับประเภทมือขวา
ดูตัวอย่างต่อไปนี้:
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
เมื่อมีโอเปอเรเตอร์หลายตัวปรากฏในนิพจน์ อันไหนเกิดก่อน สิ่งนี้เกี่ยวข้องกับปัญหาลำดับความสำคัญของตัวดำเนินการ ในนิพจน์แบบหลายตัวดำเนินการ ลำดับความสำคัญของตัวดำเนินการที่แตกต่างกันจะนำไปสู่ผลลัพธ์สุดท้ายที่แตกต่างกันมาก
ตัวอย่างเช่น (1+3) + (3+2)*2 ถ้านิพจน์นี้คำนวณตามเครื่องหมายบวกเป็นลำดับความสำคัญสูงสุด คำตอบคือ 18 และถ้าเครื่องหมายคูณมีลำดับความสำคัญสูงสุด คำตอบก็คือ 14.
อีกตัวอย่างหนึ่ง x = 7 + 3 * 2; ในที่นี้ x ได้รับ 13 ไม่ใช่ 20 เนื่องจากตัวดำเนินการคูณมีลำดับความสำคัญสูงกว่าตัวดำเนินการบวก ดังนั้น 3 * 2 จะถูกคำนวณก่อนเพื่อให้ได้ 6 จากนั้นจึงบวก 7
ตัวดำเนินการที่มีลำดับความสำคัญสูงสุดในตารางต่อไปนี้จะอยู่ที่ด้านบนของตาราง และตัวดำเนินการที่มีลำดับความสำคัญต่ำสุดจะอยู่ที่ด้านล่างของตาราง
หมวดหมู่ | ผู้ดำเนินการ | ความเกี่ยวข้อง |
---|---|---|
คำต่อท้าย | () [] . (ตัวดำเนินการจุด) | จากซ้ายไปขวา |
หนึ่งหยวน | - - | จากขวาไปซ้าย |
การคูณ | - | จากซ้ายไปขวา |
การเติมแต่ง | - | จากซ้ายไปขวา |
กะ | - | จากซ้ายไปขวา |
ความสัมพันธ์ | - | จากซ้ายไปขวา |
เท่ากัน | - | จากซ้ายไปขวา |
ระดับบิตและ | - | จากซ้ายไปขวา |
บิตไวซ์ XOR | - | จากซ้ายไปขวา |
บิตไวส์หรือ | - | จากซ้ายไปขวา |
ตรรกะและ | - | จากซ้ายไปขวา |
ตรรกะหรือ | - | จากซ้ายไปขวา |
เงื่อนไข | - - | จากขวาไปซ้าย |
งานที่มอบหมาย | - | จากขวาไปซ้าย |
ลูกน้ำ | - | จากซ้ายไปขวา |