TỔNG QUAN
CẤU TRÚC ĐIỀU KHIỂN
VÒNG LẶP
CHUỖI VÀ MẢNG
COLLECTIONS
THƯ VIỆN QUAN TRỌNG
HƯỚNG ĐỐI TƯỢNG
XỬ LÝ LUỒNG
EXCEPTION
LÀM VIỆC VỚI FILE
THAM KHẢO
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

Các toán tử thường dùng trong Java

Trong bài ngày hôm nay, tôi sẽ giới thiệu đến các bạn các toán tử cơ bản (Basic Operators) trong Java. Sau đó, tôi sẽ đưa ra một ví dụ tổng hợp những gì chúng ta học từ đầu series tới giờ và có sử dụng các loại toán tử này. Trong phần bài tập, tôi cũng sẽ đưa ra một số dạng bài tập cho các bạn tham khảo.

test php

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

1. Các toán tử cơ bản (Basic Operators) trong Java.

Trong Java, chúng ta thường gặp các loại toán tử sau: Toán tử gán, toán tử số học, toán tử một ngôi, toán tử so sánh, toán tử luận lý điều kiện và cuối cùng tôi sẽ giới thiệu đến các bạn độ ưu tiên giữa các toán tử trong Java.

Toán tử gán.

Toán tử Mô tả Ví dụ
= Gán giá trị từ các toán hạng bên phải cho toán hạng bên trái. a = 1 sẽ gán giá trị 1 cho a.
+= Cộng hoặc nối chuỗi toán hạng bên phải vào toán hạng bên trái và gán lại kết quả cho toán hạng bên trái. a += 1 (tương đương với a = a + 1).
-= Trừ toán hạng bên phải khỏi toán hạng trái và gán lại kết quả cho toán hạng bên trái. a -=1 (tương đương với a = a - 1).
*= Nhân toán hạng bên phải với toán hạng bên trái và gán lại kết quả cho toán hạng bên trái. a *= 2 (tương đương với a = a * 2).
/= Chia toán hạng bên phải cho toán hạng bên trái và gán lại kết quả cho toán hạng bên trái. a /= 2 (tương đương với a = a / 2).
%= Chia toán hạng bên phải cho toán hạng bên trái và lấy phần dư gán cho toán hạng bên trái. a %= 2 (tương đương với a = a % 2).

Toán tử số học.

Toán tử Mô tả
+ Toán tử cộng.
- Toán tử trừ.
* Toán tử nhân.
/ Toán tử chia.
% Toán tử chia lấy phần dư.

Toán tử 1 ngôi.

Toán tử Mô tả
+ Chỉ định giá trị không âm.
- Chỉ định giá trị âm.
++ Tăng giá trị của toán hạng đó lên 1 đơn vị.
-- Giảm giá trị của toán hạng đó đi 1 đơn vị.
! Phép toán phủ định trên một giá trị luận lý. Nếu một điều kiện đang nhận giá trị là true thì toán tử này sẽ thay đổi giá trị đó thành false và ngược lại.

Đối với toán tử ++ và -- thì trong Java có 2 loại đó là Prefix (tiền tố) và Postfix (hậu tố).

  • Đối với Prefix thì toán tử ++ hoặc -- sẽ nằm đằng sau toán hạng đó. Ví dụ: a++ hoặc a--.
  • Đối với Postfix thì toán tử ++ hoặc -- sẽ đứng đằng trước toán hạng đó. Ví dụ: ++a hoặc --a.

Vậy sự khác nhau giữa Prefix và Postfix là gì? Câu trả lời là nếu như toán hạng (biến) đó chỉ đứng một mình (ví dụ a++ hoặc a--) thì Postfix hay Prefix là giống nhau nhưng trường hợp đó rất ít khi xảy ra, bởi vì đối với những chương trình lớn và có tính phức tạp thì chúng ta thường phải giải quyết những biểu thức tổng hợp của nhiều toán tử. Vậy giả sử khi gặp những biểu thức tổng hợp này thì chúng ta phải giải quyết như thế nào? Tôi sẽ hướng dẫn các bạn trong ví dụ dưới đây:

Bài viết này được đăng tại [free tuts .net]

Giả sử chúng ta có đoạn chương trình như sau:

Ví dụ
package toan_tu;

public class PostfixPrefix {

	public static void main(String[] args) {
		int firstVariable = 5, secondVariable = 7;
		int result = firstVariable++ + ++secondVariable - 8;
		System.out.println("First variable = " + firstVariable);
		System.out.println("Second variable = " + secondVariable);
		System.out.println("Third variable = " + result);
	}

}

Theo bạn, sau khi biên dịch đoạn chương trình thì giá trị của mỗi biến bằng bao nhiêu?

Khi gặp 1 vấn đề như vậy thì chúng ta thực hiện theo các bước như sau:

Bước 1: Ưu tiên xử lý Prefix trước.

Bước 2: Xử lý các phép toán còn lại.

Bước 3: Gán giá trị cho toán hạng nằm bên trái dấu bằng trước.

Bước 4: Xử lý Postfix.

Dựa theo các bước trên, chúng ta giải bài toán trên như sau:

Bước thực hiện Kết quả
Bước 1: Xử lý Prefix trước: Chúng ta nhận thấy trong đoạn chương trình trên có ++secondVariable là Prefix nên chúng ta xử lý trước. ++secondVariable = 7+ 1 = 8.
Bước 2: Xử lý các phép toán còn lại. 5 + 8 - 8 = 5.
Bước 3: Gán kết quả vừa có cho toán hạng bên trái. result = 5
Bước 4: Xử lý Postfix. firstVariable++ = 5 + 1= 6.

Kết quả cuối cùng là: firstVariable = 6, secondVariable = 8, result = 5.

Toán tử so sánh.

Toán tử Mô tả
== (So sánh bằng) So sánh giá trị của toán hạng bên trái và toán hạng bên phải có bằng nhau hay không. Nếu có thì kết quả trả về true, ngược lại trả về false.
!= (So sánh không bằng) So sánh giá trị của toán hạng bên trái và toán hạng bên phải có không bằng nhau hay không. Nếu có thì kết quả trả về true, ngược lại trả về false.
> (So sánh lớn hơn). So sánh giá trị của toán hạng bên trái có lớn hơn toán hạng bên phải hay không. Nếu có thì kết quả trả về true, ngược lại trả về false.
>= (So sánh lớn hơn hoặc bằng) So sánh giá trị của toán hạng bên trái có lớn hơn hoặc bằng toán hạng bên phải hay không. Nếu có thì kết quả trả về true, ngược lại trả về false.
< (So sánh nhỏ hơn) So sánh giá trị của toán hạng bên trái có nhỏ hơn toán hạng bên phải hay không. Nếu có thì kết quả trả về true, ngược lại trả về false.
<= (So sánh nhỏ hơn hoặc bằng) So sánh giá trị của toán hạng bên trái có nhỏ hơn hoặc bằng toán hạng bên phải hay không. Nếu có thì kết quả trả về true, ngược lại trả về false.

Sau đâu tôi sẽ đưa ra ví dụ minh họa toán tử so sánh.

Ví dụ
package toan_tu;

import java.util.Scanner;

public class ToanTuSoSanh {
	public static void main(String[] args) {
		int firstVariable, secondVariable;
		Scanner scanner = new Scanner(System.in);
		System.out.println("Nhập vào số thứ nhất: ");
		firstVariable = scanner.nextInt();
		System.out.println("Nhập vào số thứ hai: ");
		secondVariable = scanner.nextInt();
		System.out.println("Kết quả của so sánh bằng " + firstVariable + " và " + 
				secondVariable + " là " + (firstVariable == secondVariable));
		System.out.println("Kết quả của so sánh không bằng " + firstVariable + " và " + 
				secondVariable + " là " + (firstVariable != secondVariable));
		System.out.println("Kết quả của so sánh lớn hơn " + firstVariable + " và " + 
				secondVariable + " là " + (firstVariable > secondVariable));
		System.out.println("Kết quả của so sánh lớn hơn hoặc bằng " + firstVariable + " và " + 
				secondVariable + " là " + (firstVariable >= secondVariable));
		System.out.println("Kết quả của so sánh nhỏ hơn " + firstVariable + " và " + 
				secondVariable + " là " + (firstVariable < secondVariable));
		System.out.println("Kết quả của so sánh nhỏ hơn hoặc bằng " + firstVariable + " và " + 
				secondVariable + " là " + (firstVariable <= secondVariable));
	}
}
Kết quả của ví dụ trên như sau:

ketqua toantusosanh PNG

Toán tử luận lý điều kiện.

Toán tử Mô tả
&& Phép toán luận lý VÀ (AND) trên 2 giá trị, Kết quả trả về true khi cả hai đều đúng.
|| Phép toán luận lý HOẶC (OR) trên 2 giá trị. Kết quả trả về false khi cả hai đều sai.
?: Toán tử điều kiện 3 ngôi.

Đoạn chương trình dưới đây sẽ giúp các bạn hiểu rõ hơn về toán tử luận lý điều kiện.

Ví dụ
package toan_tu;

import java.util.Scanner;

public class ToanTuLuanLyDieuKien {
	public static void main(String[] args) {
		int firstNumber, secondNumber;	
		
		Scanner scanner = new Scanner(System.in);
		System.out.println("Nhập vào số thứ nhất: ");
		firstNumber = scanner.nextInt();
		System.out.println("Nhập vào số thứ hai: ");
		secondNumber = scanner.nextInt();
		
		// Sử dụng toán tử luận lý điều kiện
		System.out.println("Kết quả của (firstNumber < 10) && (secondNumber < 10) là " +
				 ((firstNumber < 10) && (secondNumber < 10)));	// Toán tử AND
		System.out.println("Kết quả của (firstNumber < 10) || (secondNumber < 10) là " + 
				 ((firstNumber < 10) || (secondNumber < 10)));	// Toán tử OR
	}

}
Kết quả sau khi biên dịch chương trình:

ketqua toantuluanlydieukien PNG

Giải thích chương trình:

Khi biên dịch chương trình, tôi sẽ nhập vào firstNumber = 8 secondNumber = 12.

Bước 1: Trong toán tử AND các bạn nhận thấy tôi so sánh 2 số vừa nhập với 10, vì số thứ nhất = 8 nhỏ hơn 10 là đúng và số thứ hai = 12 nhỏ hơn 10 là sai và theo mô tả của toán tử AND thì biểu thức sẽ trả về kết quả đúng ⇔ cả hai biểu thức con đều đúng mà trong ví dụ này chỉ có 1 biểu thức con đúng nên trình biên dịch sẽ trả về kết quả là false.

Bước 2: Tương tự, trong toán tử OR các bạn nhận thấy 8 nhỏ hơn 10 là đúng và 12 nhỏ hơn 10 là sai và theo mô tả của toán tử OR thì biểu thức sẽ trả về kết quả sai ⇔ cả hai biểu thức con đều sai, nhưng trong trường hợp này chỉ có 1 biểu thức con sai nên kết quả của chương trình vẫn là true.

Độ ưu tiên giữa các toán tử.

Thứ tự Toán tử
1 Các toán tử 1 ngôi: +-++--
2 Các toán tử số học: */+-
3 Các toán tử: ><>=<===!=
4 Các toán tử luận lý điều kiện: &&||?:
5 Các toán tử gán: =*=, /=+=, -=

Trong một số trường hợp, chúng ta nên dùng dấu ngoặc tròn để nhóm các biểu thức lại để quy định độ ưu tiên giữa các toán tử. Dấu ngoặc tròn làm cho biểu thức rõ ràng, rõ nghĩa hơn và tránh được những sai sót trong quá trình thực thi biểu thức.

2. Ví dụ tổng hợp.

Viết chương trình tính thể tích và diện tích bề mặt của một hình cầu với bán kính r nhập vào từ bàn phím (r > 0). Kết quả chỉ cần lấy 2 chữ số thập phân. Công thức tính như sau:

Thể tích = (4/3) * PI * r3.

Diện tích bề mặt = 4 * PI * r2.

Hướng dẫn: Để làm tròn kết quả với 2 chữ số thập phân các bạn sử dụng lớp DecimalFormat theo cú pháp như sau: DecimalFormat decimalFormat = new DecimalFormat("#.##") với phần sau dấu chấm tương ứng với số chữ số thập phân cần lấy (ở đây chúng ta cần lấy 2 chữ số thập phân nên sẽ sử dụng 2 dấu ##).

Bài giải
package toan_tu;

import java.text.DecimalFormat;
import java.util.Scanner;

public class TinhDienTichVaTheTichHinhCau {
	public static final float PI = 3.14f;	// khai báo hằng số
	
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		
		// Khai báo lớp DecimalFormat dùng để định dạng số
		DecimalFormat decimalFormat = new DecimalFormat("#.##");
		
		System.out.println("Nhập vào bán kính hình cầu (r > 0): ");
		float radius = scanner.nextFloat();
		
		// Tính diện tích bề mặt hình cầu
		float area = 4 * PI * radius * radius;
		System.out.println("Diện tích hình cầu = " + decimalFormat.format(area));
		
		/*
		 *  Tính thể tích hình cầu
		 *  Lưu ý phải ép kiểu kết quả của 4/3 về số thực nếu không sẽ dẫn đến sai kết quả
		 */
		float vol = (float)4/3 * PI * radius * radius * radius;
		System.out.println("Thể tích hình cầu = " + decimalFormat.format(vol));
	}

}

Kết quả sau khi biên dịch chương trình:

ketqua tinhdientichthetichhinhcau PNG

3. Lời kết.

Đây là bài cuối cùng trong chương Tổng quan về Java. Trong chương này, chúng ta đã tìm hiểu tổng quan về Java, các thế mạnh đặc trưng của Java, các kiểu dữ liệu, cách khai báo biến và đặc biệt các toán tử thường dùng trong Java. Chương tiếp theo - chương Cấu trúc điều khiển sẽ giới thiệu các cấu trúc điều khiển và cách thức hoạt động và mục đích của nó trong các chương trình Java. Các bạn cố gắng theo dõi nhé!

Câu hỏi thường gặp liên quan:

Cùng chuyên mục:

Hướng dẫn Upload file với Spring Boot và jQuery Ajax trong Java

Hướng dẫn Upload file với Spring Boot và jQuery Ajax trong Java

Hướng dẫn download file với Spring Boot trong Java

Hướng dẫn download file với Spring Boot trong Java

Hướng dẫn Upload file với Spring Boot trong Java

Hướng dẫn Upload file với Spring Boot trong Java

Hướng dẫn CRUD với Spring Boot, REST và AngularJS trong Java

Hướng dẫn CRUD với Spring Boot, REST và AngularJS trong Java

Cách sử dụng Spring  Scheduled trong Spring Boot

Cách sử dụng Spring Scheduled trong Spring Boot

Cách dùng Groovy trong Spring Boot Java

Cách dùng Groovy trong Spring Boot Java

Cách dùng Spring Boot và Mustache trong Java

Cách dùng Spring Boot và Mustache trong Java

Cách dùng Spring Boot và MongoDB trong Java

Cách dùng Spring Boot và MongoDB trong Java

Cách tạo Restful Client bằng RestTemplate trong Spring Boot

Cách tạo Restful Client bằng RestTemplate trong Spring Boot

Hướng dẫn sử dụng Interceptor trong Spring Boot

Hướng dẫn sử dụng Interceptor trong Spring Boot

Sử dụng Twitter Bootstrap trong Spring Boot

Sử dụng Twitter Bootstrap trong Spring Boot

Tạo trang web đa ngôn ngữ với Spring Boot trong Java

Tạo trang web đa ngôn ngữ với Spring Boot trong Java

Tạo ứng dụng Chat với Spring Boot và Websocket

Tạo ứng dụng Chat với Spring Boot và Websocket

Sử dụng JUnit để tạo unit test trong Spring Boot

Sử dụng JUnit để tạo unit test trong Spring Boot

Cách triển khai Spring Boot trên Tomcat Server

Cách triển khai Spring Boot trên Tomcat Server

Cách test RESTful API trong Spring Boot

Cách test RESTful API trong Spring Boot

Cách dùng Spring Security trong Spring Boot để xác thực và phân quyền

Cách dùng Spring Security trong Spring Boot để xác thực và phân quyền

Duyệt cây nhị phân bằng phương pháp inOder trong Java

Duyệt cây nhị phân bằng phương pháp inOder trong Java

Xóa node của cây nhị phân tìm kiếm trong Java

Xóa node của cây nhị phân tìm kiếm trong Java

Bảo mật Spring Boot RESTful Service sử dụng Basic Authentication trong Java

Bảo mật Spring Boot RESTful Service sử dụng Basic Authentication trong Java

Top