1. Toán tử(Operator) trong Java

Trong bài viết này, bạn sẽ tìm hiểu về các loại toán tử khác nhau trong ngôn ngữ lập trình Java, cú pháp của chúng, cách sử dụng chúng và đi kèm là các ví dụ.

Toán tử là các ký hiệu đặc biệt (ký tự) thực hiện các phép toán với các số hạng (biến và giá trị). Ví dụ, + là một toán tử thực hiện phép cộng.

Trong bài viết về Biến trong Java , bạn đã học cách khai báo các biến và gán giá trị cho các biến. Bây giờ, bạn sẽ học cách sử dụng các toán tử để thao tác với các biến.

2. Toán tử gán

Toán tử gán được sử dụng trong Java để gán giá trị cho các biến. Ví dụ,

int age;
age = 5;

Toán tử gán sẽ gán giá trị ở bên phải của nó cho biến ở bên trái. Ở đây, giá trị  5 được gán cho biến age bằng cách sử dụng toán tử =.

Còn có nhiều toán tử gán khác. Tuy nhiên, để cho đơn giản, chúng ta sẽ tìm hiểu các toán tử gán khác trong phần sau của bài viết này.

Ví dụ 1: Toán tử gán

/**
* Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
*
* @author cafedevn
* Contact: cafedevn@gmail.com
* Fanpage: https://www.facebook.com/cafedevn
* Instagram: https://instagram.com/cafedevn
* Twitter: https://twitter.com/CafedeVn
* Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
*/

class AssignmentOperator {
    public static void main(String[] args) {
    	
    	int number1, number2;
    	
    	// Assigning 5 to number1 
    	number1 = 5;
    	System.out.println(number1);
    	    	
    	// Assigning value of variable number2 to number1
    	number2 = number1;
    	System.out.println(number2);
    }
}

Khi bạn chạy chương trình, kết quả sẽ là:

5
5

3. Toán tử số học

Toán tử số học được sử dụng để thực hiện các phép toán như cộng, trừ, nhân, v.v.

Các toán tử số học trong Java:

Toán tửÝ nghĩa
+Toán tử cộng (cũng được sử dụng để nối chuỗi)
Toán tử trừ
*Toán tử nhân
/Toán tử chia
%Toán tử lấy phần dư

Ví dụ 2: Toán tử số học

/**
* Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
*
* @author cafedevn
* Contact: cafedevn@gmail.com
* Fanpage: https://www.facebook.com/cafedevn
* Instagram: https://instagram.com/cafedevn
* Twitter: https://twitter.com/CafedeVn
* Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
*/

class ArithmeticOperator {
    public static void main(String[] args) {
    	
    	double number1 = 12.5, number2 = 3.5, result;
    	
    	// Using addition operator
    	result = number1 + number2;
    	System.out.println("number1 + number2 = " + result);
    	
    	// Using subtraction operator
    	result = number1 - number2;
    	System.out.println("number1 - number2 = " + result);
    	
    	// Using multiplication operator
    	result = number1 * number2;
    	System.out.println("number1 * number2 = " + result);

    	// Using division operator
    	result = number1 / number2;
    	System.out.println("number1 / number2 = " + result);
    	
    	// Using remainder operator
    	result = number1 % number2;
    	System.out.println("number1 % number2 = " + result);
    }
}

Khi bạn chạy chương trình, kết quả sẽ là:

number1 + number2 = 16.0
number1 - number2 = 9.0
number1 * number2 = 43.75
number1 / number2 = 3.5714285714285716
number1 % number2 = 2.0

Trong ví dụ trên, tất cả các số hạng được sử dụng đều là biến. Tuy nhiên, không nhất thiết phải như vậy. Các số hạng được sử dụng trong các toán tử số học cũng có thể là literals . Ví dụ:

result = number1 + 5.2;
result = 2.3 + 4.5;
number2 = number1 -2.9;

Toán tử + cũng có thể được sử dụng để nối hai hay nhiều chuỗi.

Ví dụ 3: Toán tử số học

class ArithmeticOperator {
    public static void main(String[] args) {
    	
    	String start, middle, end, result;
    	
    	start = "Talk is cheap. ";
    	middle = "Show me the code. ";
    	end = "- Linus Torvalds";
    	
    	result = start + middle + end;
    	System.out.println(result);
    }
}

Khi bạn chạy chương trình, kết quả sẽ là:

Talk is cheap. Show me the code. - Linus Torvalds

4. Toán tử một ngôi

Toán tử một ngôi chỉ thực hiện phép toán với một số hạng.

Toán tửÝ nghĩa
+Cộng một ngôi (toán tử này là không cần thiết vì kể cả khi không sử dụng toán tử này, các số vẫn luôn dương)
Trừ một ngôi; đảo dấu của một biểu thức
++Toán tử gia tăng; tăng giá trị lên 1
toán tử giảm; giảm giá trị đi 1
!Toán tử bổ sung logic, đảo ngược giá trị boolean

Ví dụ 4: Toán tử một ngôi

/**
* Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
*
* @author cafedevn
* Contact: cafedevn@gmail.com
* Fanpage: https://www.facebook.com/cafedevn
* Instagram: https://instagram.com/cafedevn
* Twitter: https://twitter.com/CafedeVn
* Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
*/

class UnaryOperator {
    public static void main(String[] args) {
    	
    	double number = 5.2, resultNumber;
    	boolean flag = false;
    	
    	System.out.println("+number = " + +number);
    	// number is equal to 5.2 here.
    	
    	System.out.println("-number = " + -number);
    	// number is equal to 5.2 here.
    	
        // ++number is equivalent to number = number + 1
    	System.out.println("number = " + ++number);
        // number is equal to 6.2 here.

        // -- number is equivalent to number = number - 1
    	System.out.println("number = " + --number);
        // number is equal to 5.2 here.

    	System.out.println("!flag = " + !flag);
    	// flag is still false.
    }
}

Khi bạn chạy chương trình, kết quả sẽ là:

+number = 5.2
-number = -5.2
number = 6.2
number = 5.2
!flag = true

Bạn cũng có thể sử dụng toán tử  ++ và — làm tiền tố và hậu tố trong Java. Các toán tử ++ tăng giá trị lên 1 và toán tử — giảm giá trị đi 1.

int myInt = 5;
++myInt   // myInt becomes 6
myInt++   // myInt becomes 7
--myInt   // myInt becomes 6
myInt--   // myInt becomes 5

Hiện tại kiến thức vẫn còn đơn giản. Tuy nhiên, có một sự khác biệt cần chú ý trong khi sử dụng toán tử tăng và giảm làm tiền tố và hậu tố. Hãy xem xét ví dụ này,

Ví dụ 5: Toán tử một ngôi

class UnaryOperator {
    public static void main(String[] args) {
    	
    	double number = 5.2;

    	System.out.println(number++);
    	System.out.println(number);

    	System.out.println(++number);
    	System.out.println(number);
    }
}

Khi bạn chạy chương trình, kết quả sẽ là:

5.2
6.2
7.2
7.2

Khi câu lệnh System.out.println(number++); được thực hiện, giá trị ban đầu được tính toán trước. Sau đó biến number mới tăng giá trị. Đó là lý do tại sao kết quả nhận được là 5.2. Sau đó, khi câu lệnh System.out.println(number); được thự hiện, giá trị sau khi tăng (tức 6.2) được hiển thị.

Tuy nhiên, khi câu lệnh System.out.println(++number);được thực hiện, biến number sẽ tăng thêm 1 rồi mới được in ra màn hình.

Tương tự đối với trường hợp toán tử giảm –.

5. Toán tử quan hệ và toán tử bằng

Các toán tử bằng và toán tử quan hệ xác định mối quan hệ giữa hai số hạng. Nó kiểm tra nếu một số hạng lớn hơn, nhỏ hơn, bằng, không bằng số hạng kia và v.v. Tùy thuộc vào mối quan hệ, nó cho một trong hai kết quả true hoặc false.

Toán tửMô tảThí dụ
==bằng5 == 3 được cho kết quả là false
! =không bằng5! = 3 cho kết quả là true
>lớn hơn5> 3 cho kết quả là true
<bé hơn5 <3 cho kết quả là false
> =lớn hơn hoặc bằng5> = 5 cho kết quả là true
<=bé hơn hoặc bằng5 <= 5 cho kết quả là true

Các toán tử bằng và quan hệ được sử dụng trong việc quyết định xem sẽ làm gì tiếp theo và các vòng lặp (sẽ được thảo luận sau).Giờ, hãy xét 1 ví dụ đơn giản như sau.

Ví dụ 6: Các toán tử bằng và quan hệ

class RelationalOperator {
    public static void main(String[] args) {
    	
    	int number1 = 5, number2 = 6;

    	if (number1 > number2)
    	{
    		System.out.println("number1 is greater than number2.");
    	}
    	else
    	{
    		System.out.println("number2 is greater than number1.");
    	}
    }
}

Khi bạn chạy chương trình, kết quả sẽ là:

number2 is greater than number1.

Ở đây, chúng ta đã sử dụng toán tử > để kiểm tra xem number1 có lớn hơn number2 hay không.

Vì number2 lớn hơn number1 , biểu thức number1 > number2 trả kết quả là false.

Do đó, đoạn code bên trong else được thực hiện và đoạn code bên trong if bị bỏ qua.

Nếu không hiểu đoạn code trên thì đừng quá lo lắng. Nó sẽ được tìm hiểu một cách chi tiết trong bài viết Java if…else.

Bây giờ, chỉ cần nhớ rằng các toán tử bằng và quan hệ so sánh hai số hạng và trả giá trị là true hoặc false.

Ngoài các toán tử quan hệ, còn có một kiểu toán tử so sánh instanceof, nó so sánh một đối tượng với một kiểu xác định. Ví dụ:

5.1 Toán tử instanceof

Đây là một ví dụ về toán tử instanceof tác 

class instanceofOperator {
    public static void main(String[] args) {
    	
    	String test = "asdf";
    	boolean result;
    	
    	result = test instanceof String;
    	System.out.println(result);
    }
}

Khi chạy chương trình, kết quả sẽ là true. Đó là vì biến test là instance của String class.

Bạn sẽ tìm hiểu thêm về chức năng của các toán tử instanceof  khi đã hiểu về Các class và đối tượng trong Java.

6. Toán tử logic

Các toán tử logic || (điều kiện-OR) và && (điều kiện-AND) thao tác với các biểu thức boolean. Dưới đây là cách chúng hoạt động.

Toán tửMô tảThí dụ
| |điều kiện-OR; true nếu một trong các biểu thức boolean là truefalse || true trả về kết quả là true
&&có điều kiện-AND; true nếu tất cả các biểu thức boolean là truefalse && true trả về kết quả false

Ví dụ 8: Toán tử logic

/**
* Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
*
* @author cafedevn
* Contact: cafedevn@gmail.com
* Fanpage: https://www.facebook.com/cafedevn
* Instagram: https://instagram.com/cafedevn
* Twitter: https://twitter.com/CafedeVn
* Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
*/

class LogicalOperator {
    public static void main(String[] args) {
    	
    	int number1 = 1, number2 = 2, number3 = 9;
    	boolean result;
    	
    	// At least one expression needs to be true for result to be true
    	result = (number1 > number2) || (number3 > number1);
    	// result will be true because (number1 > number2) is true
    	System.out.println(result);
    			
    	// All expression must be true from result to be true	
    	result = (number1 > number2) && (number3 > number1);
    	// result will be false because	(number3 > number1) is false
    	System.out.println(result);
    }
}

Khi bạn chạy chương trình, kết quả sẽ là:

true
false

Toán tử logic được sử dụng để quyết định thực hiện cái gì đó và có thể sử dụng lại.

7. Toán tử Ternary

Toán tử điều kiện hoặc toán tử ternary ?: là viết tắt của câu lệnh  if-then-else. Cú pháp của toán tử điều kiện là:

variable = Expression ? expression1 : expression2

Dưới đây là cách nó hoạt động.

  • Nếu biểu thức là true, biểu thức 1 được gán cho biến.
  • Nếu biểu thức là false, biểu thức 2 được gán cho biến.

Ví dụ 9: Toán tử Ternary

/**
* Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
*
* @author cafedevn
* Contact: cafedevn@gmail.com
* Fanpage: https://www.facebook.com/cafedevn
* Instagram: https://instagram.com/cafedevn
* Twitter: https://twitter.com/CafedeVn
* Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
*/

class ConditionalOperator {
    public static void main(String[] args) {
    	
    	int februaryDays = 29;
    	String result;
    	
    	result =  (februaryDays == 28) ? "Not a leap year" : "Leap year";
    	System.out.println(result);
    }
}

Khi bạn chạy chương trình, kết quả sẽ là:

Leap year

Để tìm hiểu thêm, hãy truy cập toán tử ternary Java .

8. Toán tử Bitwise và Bit Shift

Để thực hiện các toán tử bitwise và bitshift trong Java, ta sử dụng các toán tử sau:

Toán tửMô tả
~Phủ định NOT
<<Dịch trái
>>Dịch phải
>>>Bỏ dịch phải
&Toán tử AND
^Toán tử exclusive OR
|Toán tử OR

Các toán tử này không được sử dụng phổ biến. Truy cập trang này để tìm hiểu thêm về Các toán tử bitwise và bit shift .

8.1 Các toán tử gán khác 

Chúng ta mới chỉ thảo luận về toán tử gán = trong phần đầu của bài viết. Ngoài toán tử này, có khá nhiều toán tử gán giúp chúng ta viết code gọn hơn.

Toán tửThí dụTương đương với
+ =x + = 5x = x + 5
– = =x – = 5x = x – 5
* =x * = 5x = x * 5
/ =x / = 5x = x / 5
% =x% = 5x = x / 5
<< =x << = 5x = x << 5
>> =x >> = 5x = x >> 5
& =x & = 5x = x & 5
^ =x ^ = 5x = x ^ 5
| =x | = 5x = x | 5

Bây giờ ta đã học về các toán tử Java, đã đến lúc tìm hiểu Thứ tự ưu tiên của các toán tử Java; tức là thứ tự thực hiện các toán tử trong một biểu thức có nhiều toán tử.

Đăng ký kênh youtube để ủng hộ Cafedev nha các bạn, Thanks you!