Toán Tử Trong Java - GP Coder (Lập Trình Java)

Java cung cấp rất nhiều toán tử đa dạng để thao tác với các biến. Chúng ta có thể chia tất cả các toán tử trong Java thành các nhóm sau:

Nội dung

  • 1 Toán tử số học
  • 2 Toán tử quan hệ
  • 3 Toán tử thao tác bit
  • 4 Toán tử logic
  • 5 Các toán tử gán
  • 6 Toán tử hỗn hợp
  • 7 Thứ tự ưu tiên của các toán tử
  • 8 Thay đổi thứ tự ưu tiên của các toán tử
  • 9 So sánh toán tử logic và toán tử thao tác bit
  • 10 Thăng hạn dữ liệu (Numeric Promotion)

Toán tử số học

Toán tửMiêu tảVí dụ: B = 20, A = 10
+Phép cộngA + B sẽ cho kết quả 30
Phép trừ: trừ toán hạng trái cho toán hạng phảiA – B sẽ cho kết quả -10
*Phép nhânA * B sẽ cho kết quả 200
/Phép chia: chia toán hạng trái cho toán hạng phảiB / A sẽ cho kết quả 2
%Phép chia lấy phần dư: Lấy phần dư của phép chia toán hạng trái cho toán hạng phảiB % A sẽ cho kết quả 0
++Phép lượng gia: lượng gia giá trị toán hạng thêm 1B++ sẽ cho kết quả 21
Phép lượng giảm: lượng giảm giá trị toán hạng đi 1B– sẽ cho kết quả 19

Toán tử quan hệ

Toán tửMiêu tảVí dụ: B = 20, A = 10
==Kiểm tra nếu giá trị của hai toán hạng có cân bằng hay không, nếu có thì điều kiện là true.(A == B) là không true.
!=Kiểm tra nếu giá trị hai toán hạng là cân bằng hay không, nếu không cân bằng, thì điều kiện là true(A != B) là true.
>Kiểm tra nếu toán hạng trái có lớn hơn toán hạng phải hay không, nếu có thì điều kiện là true(A > B) là không true.
<Kiểm tra nếu toán hạng phải có lớn hơn toán hạng trái hay không, nếu có thì điều kiện là true(A < B) là true.
>=Kiểm tra nếu toán hạng trái có lớn hơn hoặc bằng toán hạng phải hay không, nếu có thì điều kiện là true(A >= B) là không true.
<=Kiểm tra nếu toán hạng phải có lớn hơn hoặc bằng toán hạng trái hay không, nếu có thì điều kiện là true(A <= B) là true.

Lưu ý: Toán tử == và != được sử dụng trong các trường hợp sau:

  • So sánh hai kiểu nguyên thủy số hoặc ký tự. Nếu các giá trị số thuộc các kiểu dữ liệu khác nhau, các giá trị sẽ tự động được thăng hạng. Ví dụ: 5 == 5,00 trả về true vì phía bên trái được thăng cấp thành double.
  • So sánh hai giá trị boolean.
  • So sánh hai đối tượng, bao gồm giá trị null và chuỗi.

Toán tử thao tác bit

Toán tửMiêu tảVí dụ: B = 20, A = 10
&Toán tử Và nhị phân sao chép một bit tới kết quả nếu nó tồn tại trong cả hai toán hạng(A & B) sẽ cho kết quả 12, hay là 0000 1100
|Toán tử Hoặc nhị phân sao chép một bit tới kết quả nếu nó tồn tại trong một hoặc hai toán hạng(A | B) sẽ cho kết quả 61, hay là 0011 1101
^Toán tử Hoặc loại trừ nhị phân sao chép bit nếu nó được thiết lập trong một toán hạng nhưng không phải trong cả hai(A ^ B) sẽ cho kết quả 49, hay là 0011 0001
~Toán tử đảo bit là toán tử một ngôi. Đảo bít 1 thành 0 và ngược lại(~A ) sẽ cho kết quả -61, hay là 1100 0011
<<Toán tử dịch trái. Giá trị toán hạng trái được dịch chuyển sang trái bởi số các bit được xác định bởi toán hạng bên phải.A << 2 sẽ cho kết quả 240, hay là 1111 0000
>>Toán tử dịch phải. Giá trị toán hạng trái được dịch chuyển sang phải bởi số các bit được xác định bởi toán hạng bên phảiA >> 2 sẽ cho kết quả 15, hay là 1111
>>>Toán tử dịch phải và điền 0 vào chỗ trốngA >>>2 sẽ cho kết quả 15, hay là 0000 1111

Toán tử logic

Toán tửMiêu tảVí dụ: B = true, A = false
&&Toán tử logic. Nếu cả hai toán hạng là true, thì khi đó điều kiện là true(A && B) là false.
||Toán tử Hoặc logic. Nếu một trong hai toán tử là true, thì điều kiện là true(A || B) là true.
!Toán tử Phủ định logic. Sử dụng để đảo ngược lại trạng thái logic của toán hạng đó. Nếu điều kiện toán hạng là true thì phủ định nó sẽ là false.!(A && B) là true.

Các toán tử gán

Toán tửMiêu tảVí dụ: B = 20, A = 10
=Toán tử gán đơn giản. Gán giá trị toán hạng bên phải cho toán hạng trái.C = A + B sẽ gán giá trị của A + B vào cho C
+=Thêm giá trị toán hạng phải tới toán hạng trái và gán giá trị đó cho toán hạng trái.C += A là tương đương với C = C + A
-=Trừ đi giá trị toán hạng phải từ toán hạng trái và gán giá trị này cho toán hạng trái.C -= A là tương đương với C = C – A
*=Nhân giá trị toán hạng phải với toán hạng trái và gán giá trị này cho toán hạng trái.C *= A là tương đương với C = C * A
/=Chia toán hạng trái cho toán hạng phải và gán giá trị này cho toán hạng trái.C /= A là tương đương với C = C / A
%=Lấy phần dư của phép chia toán hạng trái cho toán hạng phải và gán cho toán hạng trái.C %= A là tương đương với C = C % A
<<=Dịch trái toán hạng trái sang số vị trí là giá trị toán hạng phải.C <<= 2 là giống như C = C << 2
>>=Dịch phải toán hạng trái sang số vị trí là giá trị toán hạng phải.C >>= 2 là giống như C = C >> 2
&=Phép AND bitC &= 2 là giống như C = C & 2
^=Phép OR loại trừ bitC ^= 2 là giống như C = C ^ 2
|=Phép OR bit.C |= 2 là giống như C = C | 2

Toán tử hỗn hợp

Toán tử điều kiện ( ? : )

Toán tử điều kiện là một loại toán tử đặc biệt vì nó bao gồm ba thành phần cấu thành biểu thức điều kiện. Cú pháp:

<biểu thức 1> ? <biểu thức 2> : <biểu thức 3>;

  • biểu thức 1: Biểu thức logic. Trả trả về giá trị True hoặc False
  • biểu thức 2: Là giá trị trả về nếu <biểu thức=”” 1=””>xác định là True</biểu>
  • biểu thức 3: Là giá trị trả về nếu <biểu thức=”” 1=””>xác định là False</biểu>
Ví dụ: public class Test { public static void main(String[] args) { int a = 20; int b = 3; String s = (a % b == 0) ? "a chia het cho b" : "a khong chia het cho b"; System.out.println(s); } }

Toán tử instanceof

Toán tử này chỉ được sử dụng cho các biến tham chiếu đối tượng. Toán tử kiểm tra có hay không đối tượng là một kiểu cụ thể (kiểu class hoặc kiểu interface). Toán tử instanceof được viết như sau:

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

Ví dụ: public class Test { public static void main(String args[]){ String name = "gpcoder"; // Kiểm tra name có phải là kiểu chuỗi hay không boolean result = name instanceof String; System.out.println( result ); // kết quả: true } }

Thứ tự ưu tiên của các toán tử

LoạiToán tửThứ tự ưu tiên
Postfix() [] . (toán tử dot)Trái sang phải
Unary++ – – ! ~Phải sang trái
Tính nhân* / %Trái sang phải
Tính cộng+ –Trái sang phải
Dịch chuyển>> >>> <<Trái sang phải
Quan hệ> >= < <=Trái sang phải
Cân bằng== !=Trái sang phải
Phép AND bit&Trái sang phải
Phép XOR bit^Trái sang phải
Phép OR bit|Trái sang phải
Phép AND logic&&Trái sang phải
Phép OR logic||Trái sang phải
Điều kiện?:Phải sang trái
Gán= += -= *= /= %= >>= <<= &= ^= |=Phải sang trái
Dấu phảy,Trái sang phải

Thay đổi thứ tự ưu tiên của các toán tử

Để thay đổi thứ tự ưu tiên trên một biểu thức, bạn có thể sử dụng dấu ngoặc đơn ():

  • Phần được giới hạn trong ngoặc đơn được thực hiện trước.
  • Nếu dùng nhiều ngoặc đơn lồng nhau thì toán tử nằm trong ngoặc đơn phía trong sẽ thực thi trước, sau đó đến các vòng phía ngoài.
  • Trong phạm vi một cặp ngoặc đơn thì quy tắc thứ tự ưu tiên vẫn giữ nguyên tác dụng.

Ví dụ:

package com.gpcoder; public class App { public static void main(String[] args) { int a = 20; int b = 5; int c = 10; System.out.println("a + b * c = " + (a + b * c)); System.out.println("(a + b) * c = " + ((a + b) * c)); System.out.println("a / b - c = " + (a / b - c)); System.out.println("a / (b - c) = " + (a / (b - c))); } }

Output:

a + b * c = 70(a + b) * c = 250a / b – c = -6a / (b – c) = -4

So sánh toán tử logic và toán tử thao tác bit

So sánh || và |

package com.gpcoder; public class App { public static void main(String[] args) { if (check1() || check2()) { System.out.println("Result = true"); } else { System.out.println("Result = false"); } System.out.println("---"); if (check1() | check2()) { System.out.println("Result = true"); } else { System.out.println("Result = false"); } } public static boolean check1() { System.out.println("Check 1"); return true; } public static boolean check2() { System.out.println("Check 2"); return false; } }

Output chương trình:

Check 1 Result = true --- Check 1 Check 2 Result = true

Như bạn thấy, với toán tử ||, chương trình sẽ không thực thi kiểm tra vế sau nếu vế trước cho kết quả là true. Còn với toán tử |, chương trình sẽ luôn luôn thực thi cả 2 vế.

So sánh && và &

Tương tự, với toán tử &&, chương trình sẽ không thực thi kiểm tra vế sau nếu vế trước cho kết quả là false. Còn với toán tử &, chương trình sẽ luôn luôn thực thi cả 2 vế.

package com.gpcoder; public class App { public static void main(String[] args) { if (check1() && check2()) { System.out.println("Result = true"); } else { System.out.println("Result = false"); } System.out.println("---"); if (check1() & check2()) { System.out.println("Result = true"); } else { System.out.println("Result = false"); } } public static boolean check1() { System.out.println("Check 1"); return false; } public static boolean check2() { System.out.println("Check 2"); return true; } }

Output:

Check 1 Result = false --- Check 1 Check 2 Result = false

Thăng hạn dữ liệu (Numeric Promotion)

Như chúng ta đã biết, mỗi kiểu số nguyên thủy (primitive number) có một độ dài bit xác định. Chúng ta không cần biết kích thước chính xác của các loại này, nhưng nên biết loại nào lớn hơn các loại khác. Ví dụ, giá trị long chiếm nhiều dung lượng hơn giá trị int, int chiếm nhiều dung lượng hơn giá trị short, …

Các quy tắc mà Java sẽ tuân theo khi áp dụng các toán tử cho các kiểu dữ liệu:

  • Nếu hai giá trị có kiểu dữ liệu khác nhau, Java sẽ tự động thăng hạng một trong các giá trị lên giá trị lớn hơn trong hai kiểu dữ liệu. Ví dụ: int + long -> long.
  • Nếu một trong các giá trị là nguyên và giá trị kia là dấu phẩy động, Java sẽ tự động chuyển giá trị nguyên sang kiểu dữ liệu của giá trị dấu phẩy động. Ví dụ: int + double -> double.
  • Các kiểu dữ liệu nhỏ hơn, cụ thể là byte, short và char, lần đầu tiên được thăng cấp thành int bất kỳ khi nào chúng được sử dụng với toán tử số học nhị phân Java, ngay cả khi không có toán hạng nào là int.
  • Sau khi tất cả việc thăng hạng đã xảy ra và các toán hạng có cùng kiểu dữ liệu, giá trị kết quả sẽ có cùng kiểu dữ liệu với các toán hạng được thăng hạng của nó.

Lưu ý:

  • Rule cuối cùng không áp dụng đối với các toán tử Unary. Chẳng hạn, áp dụng ++ trên short, sẽ cho kết quả là short.
  • Đối với các toán tử kết hợp (compound operator): trình biên dịch sẽ tự động chuyển giá trị kết quả sang kiểu dữ liệu của giá trị ở phía bên trái của toán tử ghép. Ví dụ:
long bigger = 1; int smaller = 2; smaller *= bigger; 5.004 Nếu bạn thấy hay thì hãy chia sẻ bài viết cho mọi người nhé! Và Donate tác giảShares

Chuyên mục: Basic Java Được gắn thẻ: Basic Java

Một số ký tự đặc biệt trong JavaMột số từ khóa trong Java

Có thể bạn muốn xem:

  • Tránh lỗi ConcurrentModificationException trong Java như thế nào? (27/08/2018)
  • Hướng dẫn sử dụng Java String, StringBuffer và StringBuilder (28/10/2017)
  • Integer Constant Pool trong Java (03/02/2018)
  • Lấy ngày giờ hiện tại trong Java (29/10/2017)
  • Ép kiểu trong Java (Type casting) (21/10/2017)

Bình luận

bình luận

Từ khóa » Toán Tử Gán Trong Java