Toán tử là gì?
Toán tử (Operator) là các ký tự đặc biệt được quy ước để thực hiện một hành động nào đó trong lập trình. Trong Java có nhiều loại toán tử.
Ví dụ: +, -, *, /
Có nhiều loại toán tử trong Java như sau:
- Toán tử Tăng / Giảm
- Toán tử Toán học
- Toán tử Dịch chuyển
- Toán tử Quan hệ
- Toán tử Bit
- Toán tử Logic
- Toán tử 3 Ngôi (Ternary)
- Toán tử gán
Thứ tự ưu tiên các loại toán tử trong Java
Có rất nhiều loại toán tử trong Java cũng như các ngôn ngữ lập trình khác. Vậy nên, khi sử dụng chung cùng với nhau chúng cần phải tuân theo thứ tự ưu tiên nhất định.
Hãy xem ảnh sau để biết thứ tự ưu tiên của các loại toán tử trong Java:
Ví dụ về các loại toán tử trong Java
1. Toán tử đơn: ++, –, ~, !
class OperatorExample{
public static void main(String args[]){
int x=10;
System.out.println(x++);//10 (11)
System.out.println(++x);//12
System.out.println(x--);//12 (11)
System.out.println(--x);//10
}
}
Kết quả nhận được là:
10
12
12
10
Một ví dụ khác giúp bạn hiểu rõ toán tử ++ và — hơn
class OperatorExample{
public static void main(String args[]){
int a=10;
int b=10;
System.out.println(a++ + ++a);//10+12=22
System.out.println(b++ + b++);//10+11=21
}
}
Kết quả:
22
21
Ví dụ tiếp theo về ~ và !
class OperatorExample{
public static void main(String args[]){
int a=10;
int b=-10;
boolean c=true;
boolean d=false;
System.out.println(~a);
System.out.println(~b);
System.out.println(!c);
System.out.println(!d);
}
}
Kết quả:
-11
9
false
true
2. Ví dụ về toán tử toán học trong Java
Ví dụ 1:
class OperatorExample{
public static void main(String args[]){
int a=10;
int b=5;
System.out.println(a+b);//15
System.out.println(a-b);//5
System.out.println(a*b);//50
System.out.println(a/b);//2
System.out.println(a%b);//0
}
}
Kết quả:
15
5
50
2
0
Ví dụ 2:
class OperatorExample{
public static void main(String args[]){
System.out.println(10*10/5+3-1*4/2);
}
}
Kết quả:
21
3. Ví dụ về toán tử Dịch chuyển trong JAVA
Ví dụ về toán tử Dịch trái trong JAVA
Toán tử dịch chuyển trái trong Java được sử dụng để dịch chuyển tất cả các bit trong một giá trị sang bên trái của một số lần được chỉ định.
class OperatorExample{
public static void main(String args[]){
System.out.println(10<<2);//10*2^2=10*4=40
System.out.println(10<<3);//10*2^3=10*8=80
System.out.println(20<<2);//20*2^2=20*4=80
System.out.println(15<<4);//15*2^4=15*16=240
}
}
Kết quả:
40
80
80
240
Ví dụ về toán tử Dịch phải trong JAVA
Ví dụ toán tử dịch chuyển trái: Toán tử dịch chuyển phải trong Java được sử dụng để dịch chuyển tất cả các bit trong một giá trị sang bên phải một số lần được chỉ định.
class OperatorExample{
public static void main(String args[]){
System.out.println(10>>2);//10/2^2=10/4=2
System.out.println(20>>2);//20/2^2=20/4=5
System.out.println(20>>3);//20/2^3=20/8=2
}
}
Kết quả:
2
5
2
So sánh toán tử >> và toán tử >>>
class OperatorExample{
public static void main(String args[]){
//Đối với số Dương, >> và >>> làm việc như nhau
System.out.println(20>>2);
System.out.println(20>>>2);
//Đối với số Âm
System.out.println(-20>>2);
System.out.println(-20>>>2);
}
}
Kết quả:
5
5
-5
1073741819
Lý do của sự khác nhau này là toán tử >> bảo toàn bit dấu, trong khi đó toán tử >>> không bảo toàn bit dấu.
Nó cho kết quả là một số dương khi chúng ta áp dụng toán tử >>> trên một số âm. Và MSB (bit đầu tiên) được thay thế bằng 0.
4. So sánh toán tử Logic AND và toán tử Bit AND
class OperatorExample{
public static void main(String args[]){
int a=10;
int b=5;
int c=20;
System.out.println(a<b&&a<c);//false && true = false
System.out.println(a<b&a<c);//false & true = false
}
}
Kết quả:
false
false
Một ví dụ khác:
class OperatorExample{
public static void main(String args[]){
int a=10;
int b=5;
int c=20;
System.out.println(a<b&&a++<c);//false && true = false
System.out.println(a);//10 Vì điều kiện thứ 2 không được kiểm tra
System.out.println(a<b&a++<c);//false && true = false
System.out.println(a);//11 Vì điều kiện thứ 2 đã được kiểm tra
}
}
Kết quả:
false
10
false
11
5. So sánh toán tử Logic OR và Toán tử Bit OR
Toán tử Logic OR || không kiểm tra điều kiện thứ hai nếu điều kiện đầu tiên là ĐÚNG.
Và nó sẽ kiểm tra điều kiện thứ hai chỉ khi điều kiện đầu tiên là SAI.
Toán tử Bit OR | luôn kiểm tra cả hai điều kiện cho dù điều kiện đầu tiên là ĐÚNG hay SAI.
class OperatorExample{
public static void main(String args[]){
int a=10;
int b=5;
int c=20;
System.out.println(a>b||a<c);//true || true = true
System.out.println(a>b|a<c);//true | true = true
//|| vs |
System.out.println(a>b||a++<c);//true || true = true
System.out.println(a);//10 Vì điều kiện thứ 2 không được kiểm tra
System.out.println(a>b|a++<c);//true | true = true
System.out.println(a);//11 Vì điều kiện thứ 2 được kiểm tra
}
}
Kết quả:
true
true
true
10
true
11
6. Toán tử 3 ngôi trong Java
Toán tử 3 ngôi trong Java dùng để thay thế cho câu lệnh if – else. Xem ngay ví dụ bên dưới để hiểu cách sử dụng
class OperatorExample{
public static void main(String args[]){
int a=2;
int b=5;
int min=(a<b)?a:b;
System.out.println(min);
}
}
Đoạn mã min = (a < b) ? a : b có thể được mô tả như sau:
- Nếu a nhỏ hơn b thì gán min = a
- Ngược lại thì gán min = b
Kết quả:
2
Một ví dụ khác,
class OperatorExample{
public static void main(String args[]){
int a=10;
int b=5;
int min=(a<b)?a:b;
System.out.println(min);
}
}
Kết quả:
5
7. Ví dụ về toán tử gán trong Java
Toán tử gán khá là dễ nên mình nghĩ sẽ không cần phải nói nhiều, bạn xem ví dụ là hiểu.
class OperatorExample{
public static void main(String args[]){
int a=10;
int b=20;
a+=4;//a=a+4 (a=10+4)
b-=4;//b=b-4 (b=20-4)
System.out.println(a);
System.out.println(b);
}
}
Kết quả
14
16
Một ví dụ khác về toán tử gán trong Java
class OperatorExample{
public static void main(String[] args){
int a=10;
a+=3;//10+3
System.out.println(a);
a-=4;//13-4
System.out.println(a);
a*=2;//9*2
System.out.println(a);
a/=2;//18/2
System.out.println(a);
}
}
Kết quả:
13
9
18
9
Ví dụ về toán tử gán với kiểu short
class OperatorExample{
public static void main(String args[]){
short a=10;
short b=10;
//a+=b;//a=a+b có vẻ rất tốt
a=a+b;//Biên dịch lại lỗi vì 10+10=20 là kiểu int
System.out.println(a);
}
}
Kết quả:
Compile time error
Chính vì thế, chúng ta cần phải ép kiểu
class OperatorExample{
public static void main(String args[]){
short a=10;
short b=10;
a=(short)(a+b);//20 đã được ép kiểu thành short
System.out.println(a);
}
}
Kết quả:
20
Lời kết
Như vậy là bạn đã biết về các Toán tử trong Java cũng như Thứ tự ưu tiên của các toán tử trong Java.
- Tham khảo: Khóa học Java tốt nhất ở Hà Nội
Nếu có toán tử nào bạn chưa hiểu hay không rõ chúng được ưu tiên như thế nào thì hãy tự đặt ra các ví dụ và xem trình biên dịch trả lại kết quả gì nhé.
Chúc bạn Tự học Lập trình Java thật tốt.