Chuyển đến nội dung chính

Các Toán Tử Trong Java

Một chương trình thực tế bao hàm việc tạo ra các biến. Các toán tử kết hợp các giá trị đơn giản hoặc các biểu thức con thành những biểu thức mới, phức tạp hơn và có thể trả về các giá trị. Điều này có hàm ý tạo ra các toán tử luận lý, số học, quan hệ và so sánh trên các biểu thức.

Toán tử trong java là 1 ký hiệu được dùng để thực hiện 1 phép tính/chức năng nào đấy. Techacademy sẽ giới thiệu đến bạn các toán tử cơ bản (Basic Operators) trong Java

I. Toán Tử New Trong Java

1. Từ khóa new trong Java là gì?

Đầu tiên, phải khẳng định luôn “new” trong Java là 1 … từ khóa (keyword). Vâng, chính vì vậy, chúng ta không được đặt tên hàm, phương thức, biến hay bất cứ thứ gì trùng với từ khóa new. Từ khóa new được dùng để cấp phát bộ nhớ cho đối tượng.

Nói rõ hơn đó là:

Lúc ta định nghĩa ra 1 đối tượng, chúng ta chỉ mới tạo ra nó trong “kế hoạch”, trong “tưởng tượng”. Đối tượng chưa thực sự tồn tại vì chưa được cấp phát vùng nhớ trên máy tính.

Tiếp đó, chúng ta dùng new để chính thức cấp phát vùng nhớ cho đối tượng. Đến lúc này thì đối tượng mới thực sự tồn tại trong chương trình của chúng ta.

Lưu ý: Trong Java có 1 số lớp đặc trưng không cần dùng từ khóa “new” để tạo đối tượng cho nó, do đó cách dùng của nó khá giống với 1 kiểu dữ liệu, điển hình trong trường hợp này là String.

2. Những cách dùng từ khóa new trong Java?

Từ khóa new được dùng chủ yếu trong việc tạo ra đối tượng, giúp ta có thể thao tác với đối tượng đó.

Cú pháp đơn giản của nó:

ViDuNew obj = new ViDuNew();

Nó thường được dùng bằng 1 số cách sau đây:

Cách 1: Các dùng từ khóa new để tạo đối tượng đơn giản

public class ViDuTuKhoaNew1 {
    void hienThiThongTin()
    {
        System.out.println("Gọi phương thức hienThiThongTin");  
    }
    public static void main(String[] args) {
        // Tạo đối tượng mới
        ViDuTuKhoaNew1 obj = new ViDuTuKhoaNew1();
        // Truy cập phương thức của đối tượng
        obj.hienThiThongTin();
    }  
}

Như các bạn thấy, sau khi tạo 1 class và định nghĩa phương thức hienThiThongTin() thì chúng ta chưa truy cập được phương thức đó ngay.

Mà phải tạo 1 đối tượng (thể hiện) của class đó thì mới truy cập được:

ViDuTuKhoaNew1 obj = new ViDuTuKhoaNew1();

Sau đó, các bạn có thể dùng đối tượng (thể hiện) vừa tạo để truy cập các phương thức, biến đối tượng của nó.

obj.hienThiThongTin();

Kết quả nhận được là:

Gọi đến phương thức hienThiThongTin

Cách 2: dùng từ khóa new và tham chiếu đến constructor tương ứng.

Như các bạn đã biết, khi tạo đối tượng, chương trình sẽ tự động gọi đến constructor tương ứng (nếu có định nghĩa rõ ràng constructor) hoặc nếu không có thì tự tạo và gọi đến constructor mặc định.

public class ViDuTuKhoaNew2 {

    ViDuTuKhoaNew2() {
        System.out.println("Gọi đến constructor tương ứng");
    }

    public static void main(String[] args) {
        // Tạo đối tượng mới
        ViDuTuKhoaNew2 obj = new ViDuTuKhoaNew2();
    }
}

Khi chạy chương trình, chúng ta nhận được kết quả là:

Gọi đến constructor tương ứng

Cách 3: Gọi từ khóa new để khởi tạo đối tượng mới có đối số.

Ví dụ, ở đây mình định nghĩa 1 class là Student và thực hiện get / set cho class này.

class Student {
    private String MSSV;
    private String ten;

    // Hàm (constructor) khởi tạo đối tượng
    public Student(String MSSV, String ten) {
        this.MSSV = MSSV;
        this.ten = ten;
    }

    // Các hàm get, set thuộc tính của đối tượng
    public String LayMSSV() {
        return this.MSSV;
    }

    public String LayTen() {
        return this.ten;
    }

    public void DatMSSV(String MSSV) {
        this.MSSV = MSSV;
    }

    public void DatTen(String ten) {
        this.ten = ten;
    }
}

Tiếp đó mình tạo 1 class Main (trong cùng file Main.java) để thực hiện 1 số hành động dùng class Student.

class Main {
    public static void main(String[] args) {
        // Khai báo 1 đối tượng Student và khởi tạo nó luôn, cùng 1 dòng lệnh
        Student student = new Student("B1714757", "Tran Thanh Tam");
        // Thao tác với đối tượng vừa được khởi tạo
        System.out.println("Trước khi chỉnh sửa:");
        System.out.println("Mã số sinh viên: " + student.LayMSSV());
        System.out.println("Tên sinh viên: " + student.LayTen());

        student.DatMSSV("B1704948");
        student.DatTen("Nguyen Viet Tu");

        System.out.println("Sau khi chỉnh sửa:");
        System.out.println("Mã số sinh viên: " + student.LayMSSV());
        System.out.println("Tên sinh viên: " + student.LayTen());
    }
}

Khi định nghĩa xong class Student thì bạn chưa dùng được chúng, chưa gọi đến được các phương thức của nó.

Bởi vì bạn mới chỉ lập 1 bản kế hoạch thôi.

Sau khi dùng từ khóa new, ví dụ như thế này:

Student student = new Student("B1714757", "Tran Thanh Tam");

Thì 1 sinh viên thực thụ mới được tạo ra (được cấp phát bộ nhớ)

Ở đây, mình truyền đối số trong khi new đối tượng để tận dụng constructor tạo ra các thông tin ban đầu của sinh viên luôn.

Kết quả có được như thế này:

Trước khi chỉnh sửa:
Mã số sinh viên: B1714757
Tên sinh viên: Tran Thanh Tam
Sau khi chỉnh sửa:
Mã số inh viên: B1704948
Tên sinh viên: Nguyen Viet Tu

Nếu bạn không tạo đối tượng, thì bạn không thể truy cập, chỉnh sửa như thế này được đâu:

student.DatMSSV("B1704948");
student.DatTen("Nguyen Viet Tu");

Cách 4: dùng từ khóa new để tạo mảng

Đúng vậy, bạn có thể tạo 1 mảng bằng cách dùng từ khóa new:

public class ViDuTuKhoaNew4 {  

    // Tạo 1 đối tượng mảng
    static int arr[]=new int[5];
    
    public static void main(String[] args) {  
        System.out.println("Độ dài của mảng là: "+ arr.length);  
    }
}

Lưu ý, ta dùng từ khóa static khi tạo mảng đối tượng để truy cập mà không cần tạo đối tượng mới.

Kết quả nhận được là:

Độ dài của mảng là: 5

Hoặc nếu bạn tạo đối tượng mảng mới trong phương thưc main thì không cần static, ví dụ:

public class ViDuTuKhoaNew4 {  

    public static void main(String[] args) {
        // Tạo 1 đối tượng mảng
        int arr[]=new int[5];
        System.out.println("Độ dài của mảng là: "+ arr.length);  
    }
}

Khi chạy chương trình, chúng ta cũng nhận được kết quả tương tự:

Độ dài của mảng là: 5

II. Toán Tử Bit Trong Java

Các toán tử dạng bit cho phép mọi người thao tác trên từng bit riêng biệt trong các kiểu dữ liệu nguyên thuỷ. Toán tử Bit có thể áp dụng cho kiểu số nguyên integer, long, short, char, byte.

Giả sử A = 60, B = 13

Chuyển qua dạng nhị phân

A = 0011 1100

B = 0000 1101

Toán tử Mô tả Ví dụ
& Bitwise and A & B = 0000 1100
| Bitwise or A || B = 0011 1101
^ Bitwise xor A ^ B = 0011 0001
~ Bitwise đảo bit ~A = 1100 0011
<< Left shift A << 2 = 1111 0000
>> Right shift A >> 2 = 1111
>>> Righ shift fill zero A >> 2 = 0000 1111

dùng hàm Integer.toBinaryString() để chuyển 1 số nguyên sang số dạng bit.

public class Main {
    public static void main(String[] args) {
        int a = 60, b = 13;
        int c;
        System.out.println("bit a: " + Integer.toBinaryString(a));
        System.out.println("bit b: " + Integer.toBinaryString(b));
        c = a & b;
        System.out.println("Ket qua phep (&): " + Integer.toBinaryString(c));
        c = a | b;
        System.out.println("Ket qua phep (|): " + Integer.toBinaryString(c));
        c = a ^ b;
        System.out.println("Ket qua phep (^): " + Integer.toBinaryString(c));
        c = ~a;
        System.out.println("Ket qua phep (~): " + Integer.toBinaryString(c));
        c = a << 2;
        System.out.println("Ket qua phep (<<): " + Integer.toBinaryString(c));
        c = a >>2;
        System.out.println("Ket qua phep (>>): " + Integer.toBinaryString(c));
        c = a >>>2;
        System.out.println("Ket qua phep (>>>): " + Integer.toBinaryString(c));
    }
}

III. Toán Tử Instanceof Trong Java

Toán tử instanceof trong Java là 1 toán tử được dùng để kiểm tra xem đối tượng này có phải là instance của 1 class hay interface nào đấy hay không? Kết quả trả về của toán tử này sẽ là true nếu đối tượng đấy là thể hiện của class mà bạn đang check, ngược lại thì false.

Ví dụ, mình có 1 class Application dưới đây:

package com.huongdanjava.java;

public class Application {

public static void main(String[] args) {
Application application = new Application();
System.out.println(application instanceof Application);
}

Trong hàm main() của class này, mình initialize 1 đối tượng của class Application và dùng toán tử instanceof để kiểm tra xem đối tượng này có phải là instance của class Application này hay không? bạn sẽ thấy kết quả sẽ dưới đây:

Nếu bạn viết code dưới đây:

package com.huongdanjava.java;

public class Application {

public static void main(String[] args) {
Application application = new Application();
System.out.println(application instanceof String);
}

}

thì IDE sẽ báo lỗi ngay:

Đây là trong trường hợp quá tường minh, quá rõ ràng, IDE có thể báo lỗi cho bạn biết ngay.

Nhưng nếu bạn có 1 interface với 2 implementation dưới đây:

package com.huongdanjava.java;

public interface Shape {

}
package com.huongdanjava.java;

public class Triangle implements Shape {

}
package com.huongdanjava.java;

public class Rectangle {

}

thì lúc này nếu bạn initialize đối tượng của class Triangle nhưng lại đi kiểm tra đối tượng này có phải là thể hiện của class Rectangle,

package com.huongdanjava.java;

public class Application {

public static void main(String[] args) {
Shape shape = new Triangle();

System.out.println(shape instanceof Rectangle);
}

}

IDE sẽ không thể detect lỗi lúc compile time nhưng khi chạy bạn sẽ thấy kết quả dưới đây:

Chúng ta sẽ thường dùng toán tử instanceof trong trường hợp kiểm tra xem tham số truyền vào của 1 phương thức có phải là instance của 1 class nào đấy hay không? Ví dụ như:

private void check(Shape shape) {
    if (shape instanceof Triangle) {
        Triangle triangle = (Triangle) shape;

        System.out.println("This is triangle: " + triangle.toString());
    }
}

Trong phương thức trên, tham số interface Shape có nhiều implementation khác nhau, trong phần body của phương thức, chúng ta sẽ check xem là instance được truyền vào phương thức này có phải là Triangle hay không? Nếu đúng thì xử lý code tiếp.
Kết quả:

package com.huongdanjava.java;

public class Application {

private void check(Shape shape) {
if (shape instanceof Triangle) {
Triangle triangle = (Triangle) shape;

System.out.println("This is triangle: " + triangle.toString());
}
}

public static void main(String[] args) {
Application application = new Application();
application.check(new Triangle());
}

}

Từ Java 14, bạn có thể viết lại phương thức check() dùng pattern matching instanceof, đơn giản dưới đây:

private void check(Shape shape) {
    if (shape instanceof Triangle triangle) {
        System.out.println("This is triangle: " + triangle.toString());
    }
}

Với cách viết mới, chúng ta không cần viết thêm 1 dòng code để cast instance về đối tượng mà chúng ta muốn nữa. Tất cả sẽ được thực hiện trong dòng lệnh if.

Kết quả vẫn như vậy:

IV. Toán Tử Gán Trong Java

Chương trình ví dụ đơn giản như sau minh họa những toán tử gán trong Java. Copy và paste chương trình Java này trong Test.java file và sau đó biên dịch và thực thi chương trình này:

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 bit C &= 2 là giống như C = C & 2
^= Phép OR loại trừ bit C ^= 2 là giống như C = C ^ 2
|= Phép OR bit. C |= 2 là giống như C = C | 2
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 &= 2  = " + c );
  
     c ^= a ;
     System.out.println("c ^= a   = " + c );

     c |= a ;
     System.out.println("c |= a   = " + c );
  }
}

Nó sẽ cho kết quả như sau:

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

Các bạn không được dùng toán tử gán này để gán giá trị boolean cho 1 biến có kiểu dữ liệu là char, byte, short, int, long hay float, hay double và ngược lại. Nếu cố gắng làm điều đó thì sẽ bị lỗi compile ngay.

Bạn không thể gán 1 biến mà kiểu dữ liệu của nó có khoảng giá trị lớn hơn sang 1 biến có kiểu giá trị có khoảng giá trị nhỏ hơn.

Ví dụ, chúng ta không thể gán 1 biến có kiểu long sang biến có kiểu int như sau:

đó là bởi vì khoảng giá trị của kiểu long lớn hơn int rất nhiều.

– Các toán tử còn lại bao gồm “+=“, “-=“, “*=“, “/=” là dạng viết tắt của của phép tính cộng trừ nhân chia với toán tử gán.

“+=”: đầu tiên là cộng sau đó là gán.

“-=”: đầu tiên là trừ sau đó là gán.

“*=”: đầu tiên là nhân sau đó là gán.

“/=”: đầu tiền là chia sau đó là gán.

Ví dụ chúng ta có phép tính như sau:

   
a += b;

có nghĩa là

1
a = a + b;

Hay

Java
a -= b;
1
a -= b;

có nghĩa là

Toán Tử Xor

Phép toán thao tác bit XOR lấy hai dãy bit có cùng độ dài và thực hiện phép toán logic bao hàm XOR trên mỗi cặp bit tương ứng. Kết quả ở mỗi vị trí là 1 chỉ khi bit đầu tiên là 1 hoặc nếu chỉ khi bit thứ hai là 1, nhưng sẽ là 0 nếu cả hai là 0 hoặc cả hai là 1. Ở đây ta thực hiện phép so sánh hai bit, kết quả là 1 nếu hai bit khác nhau và là 0 nếu hai bit giống nhau. Ví dụ:

0101 (số thập phân 5)

XOR 0011 (số thập phân 3)

0110 (số thập phân 6)

(cách nhớ dễ nhất là: 2 bit giống nhau trả về 0, 2 bit khác nhau trả về 1)

Bảng chân trị cho XOR:

Phép toán thao tác bit XOR có thể được dùng để đảo ngược các bit được lựa chọn trong thanh ghi (còn được gọi là bật (set) hoặc lật (flip)). Bất kỳ bit nào được bật bằng cách thực hiện phép toán thao tác bit XOR nó với 1. Ví dụ: cho dãy bit 0010 (số 2 thập phân), bit thứ hai và thứ tư có thể được kích hoạt bằng cách dùng phép toán thao tác bit XOR với 1 dãy bit có chứa 1 ở vị trí thứ hai và thứ tư:

0010 (số thập phân 2) XOR 1010 (số thập phân 10) = 1000 (số thập phân 8)

Kỹ thuật này có thể được dùng để điều khiển dãy bit biểu hiện các bộ chứa phép toán logic đúng sai (boolean).

Trong C, C++, Java, C#, toán tử thao tác bit XOR được biểu diễn bằng ký hiệu “^” (dấu mũ). Trong Pascal, toán tử này là “xor”. Ví dụ:

x = y ^ z; // C

Hay:

x:= y xor z;

Câu lệnh trên sẽ gáp trình thienmaonline.vnên hợp ngữ (Assembly) thường dùng toán tử XOR để gán giá trị của 1 thanh ghi (register) về 0. Khi thực hiện phép toán XOR cho 1 mẫu bit với chính bản thân nó, mẫu nhị phân nhận được sẽ toàn bit 0. Trên nhiều kiến trúc máy tính, dùng XOR để gán 0 cho 1 thanh ghi sẽ được CPU xử lý nhanh hơn so với chuỗi thao tác tương ứng để nạp và lưu giá trị 0 vào thanh ghi.

Toán Tử Or

Phép toán trên thao tác bit OR lấy hai dãy bit có độ dài bằng nhau và thực hiện phép toán lý luận bao hàm OR trên mỗi cặp bit tương ứng. Kết quả ở mỗi vị trí sẽ là 0 nếu cả hai bit là 0, ngược lại thì kết quả là 1. Ví dụ:

0101 (số thập phân 5)

OR 0011 (số thập phân 3)

= 0111 (số thập phân 7)

Bảng chân trị cho OR:

Phép toán thao tác bit XOR có thể được dùng để đảo ngược các bit được lựa chọn trong thanh ghi (còn được gọi là bật (set) hoặc lật (flip)). Bất kỳ bit nào được bật bằng cách thực hiện phép toán thao tác bit XOR nó với 1. Ví dụ: cho dãy bit 0010 (số 2 thập phân), bit thứ 2 và thứ tư có thể được kích hoạt bằng cách dùng phép toán thao tác bit XOR với 1 dãy bit có chứa 1 ở vị trí thứ hai và thứ tư:

0010 (số thập phân 2)

XOR 1010 (số thập phân 10)

= 1000 (số thập phân 8)

Kỹ thuật này có thể được dùng để điều khiển dãy bit biểu hiện các bộ chứa phép toán logic đúng sai (boolean).

Trong C, C++, Java, C#, toán tử thao tác bit XOR được biểu diễn bằng ký hiệu “^” (dấu mũ). Trong Pascal, toán tử này là “xor”. Ví dụ:

x = y ^ z; // C

Hay:

x:= y xor z; { Pascal }

Câu lệnh trên sẽ gáp trình viên hợp ngữ (Assembly) thường dùng toán tử XOR để gán giá trị của 1 thanh ghi (register) về 0. Khi thực hiện phép toán XOR cho 1 mẫu bit với chính bản thân nó, mẫu nhị phân nhận được sẽ toàn bit 0. Trên nhiều kiến trúc máy tính, dùng XOR để gán 0 cho 1 thanh ghi sẽ được CPU xử lý nhanh hơn so với chuỗi thao tác tương ứng để nạp và lưu giá trị 0 vào thanh ghi.

XIV. Toán Tử Logic Trong Java

Toán tử logic được sử dụng để kiểm tra tính đúng đắn của một hoặc nhiều biểu thức. Giá trị trả về của các biểu thức này là 1 giá trị kiểu boolean, true hoặc false. Trong Java, ta có các toán tử logic như sau:

AND (&&)

OR (||)

NOT (!)

Toán tử AND

Toán tử AND được sử dụng trong trường hợp chúng ta có hai hay nhiều biểu thức và chúng ta cần tất cả các biểu thức đó đều đúng, có nghĩa là kết quả trả về của chúng đều là true.

Ví dụ:

int a = 10;
int b = 15;
int c = 200;
System.out.println(c > a && c > b);

Ở đây ta có hai biểu thức là c > a và c > b và toán tử AND được sử dụng để chắc chắn rằng giá trị của c đều lớn hơn hai giá trị của hai biến còn lại là a và b.

Toán tử OR

Toán tử OR cũng được sử dụng trong trường hợp chúng ta có hai hay nhiều biểu thức và chúng ta chỉ cần 1 trong các biểu thức đó là đúng, nghĩa là giá trị của nó là true. Các biểu thức còn lại true hay false đều được nhưng ít nhất phải có 1 cái là true.

Ví dụ:

int a = 10;
int b = 15;
int c = 200;
System.out.println(c > a || b > c);

Trong ví dụ này, ta chỉ cần c lớn a là được rồi, b có lớn hơn c hay không cũng ko sao. 😀

Toán tử NOT

Toán tử NOT dùng để đảo ngược kết quả của một hay nhiều biểu thức trả về giá trị boolean. Có nghĩa nếu 1 biểu thức bất kỳ trả về giá trị true, sử dụng toán tử NOT thì kết quả cuối cùng sẽ là ngược lại với true, là false.

Ví dụ:

int a = 10;
int b = 15;
System.out.println(!(a > b));

Kết quả của ví dụ này là true bởi vì a không lớn hơn b, false, đảo ngược lại sẽ là true.

Để bạn hiểu rõ hơn về kết quả của các biểu thức sử dụng với toán tử logic, mình đưa ra bảng dưới đây, ta thường gọi nó là bảng chân trị:

Toán tử AND (&&) Toán tử OR (||)  Toán tử NOT (!) 
true && true => true true || true => true !true => false
true && false => false true || false => true !false => true
false && true => false false || true => true
false && false => false false || false => false
true && true && false => false false || false || true => true

Nhìn vào bảng trên ta có thể thấy

Toán tử AND chỉ có thể trả về true nếu tất cả các kết quả của biểu thức đều là true, nếu một trong số chúng là false thì kết quả sẽ là false.

Toán tử OR chỉ trả về false nếu tất cả các kết quả của biểu thức là false, ngược lại, chỉ cần một biểu thức là true thì kết quả sẽ là true.

Toán tử NOT thì đảo ngược kết quả có giá trị boolean.

XV. Thứ Tự Ưu Tiên Toán Tử Trong Java

Toán tử trong lập trình cũng có những thứ tự ưu tiên giống như các phép toán của chúng ta ngoài đời thực (vd: nhân chia trước cộng trừ sau). Trong Java độ ưu tiên các toán tử sẽ được sắp xếp như sau (Toán tử nào có độ ưu tiên cao hơn sẽ được thực thi trước).

Bảng dưới đây liệt kê thứ tự ưu tiên của các toán tử. Những toán tử với quyền ưu tiên cao nhất xuất hiện trên cùng của bảng, và các toán tử có quyền ưu tiên thấp nhất thì ở bên dưới cùng của bảng. Trong 1 biểu thức, các toán tử có quyền ưu tiên cao nhất được tính toán đầu tiên.

Cùng xem ảnh sau để biết thứ tự ưu tiên của các loại toán tử trong Java:

Thứ Tự Ưu Tiên Toán Tử Trong Java
Thứ Tự Ưu Tiên Toán Tử Trong Java

The post Các Toán Tử Trong Java first appeared on Techacademy.



Nhận xét

Bài đăng phổ biến từ blog này

Vẽ Tam Giác Trong C++

Vẽ tam giác trong C++ là một trong những bài tập lập trình về C++ sử dụng vòng lặp khá hay giúp các bạn luyện tư duy code cũng như cách sử dụng vòng lặp. Dưới đây là một số lời giải các bài tập vẽ tam giác trong C++ I. Vẽ Tam Giác Cân Trong C++ Viết chương trình C++ sử dụng ký tự * để vẽ tam giác vuông cân trong C++.Chúng ta sử dụng hai vòng lặp lồng nhau để giải bài toán này. Lời Giải: #include <stdio.h> #include <stdlib.h> int main() { int n; int q = 0; printf("Chuong trinh nay se in ra tam giac can\n"); printf("Nhap chieu cao tam giac cua ban: \n"); scanf("%d",&n); while (n > 0) { for (int i = 1; i<n; i++) printf("%c", ' '); for (int k = 0; k <= q; k ++) printf("%c", '*'); n -- ; q += 2 ; printf("\n"); } return 0; } II. Vẽ Hình Tam Giác Trong C++ Viết một chương trình in ra hình

Nên học C hay C++ ? Lựa chọn nào tốt hơn

Bạn đang mới học lập trình và đang phân vân nên học lập trình C hay C++ , bài viết dưới đây của Tehcacademy.edu.vn sẽ phần nào giải đáp cho bạn thắc mắc trên.  I. Nên học ngôn ngữ lập trình C hay C++ Nếu bạn đang phân vẫn lựa chọn nên học C hay C++ thì dưới đây là một số ưu điểm và nhược điểm của ngôn ngữ lập trình C và C++. Dựa trên đánh giá này, giúp bạn lựa chọn nên học lập trình C hay C++ 1, Ưu điểm và nhược điểm của ngôn ngữ lập trình C, C++ Dưới đây là một số ưu điểm, nhược điểm của ngôn ngữ c và c++: C, C++ đều có những ưu điểm và nhược điểm riêng + Ngôn ngữ lập trình C Ưu điểm : + Hiệu suất cao Mỗi một ngôn ngữ đều dựa vào khả năng sử dụng bộ nhớ để đánh giá hiệu suất. Đây chính là ưu điểm đầu tiên của C, nó có thể chạy mượt mà trên những hệ thống giới hạn về dung lượng, lý do là vì ngay từ đầu C được thiết kế với mục đích thay thế ASM trong các hệ thống bộ nhớ cực hạn chế thập niên 1960. + Tính linh hoạt Lập trình C có 2 tính linh hoạt và là 2 ưu điểm nổi bật củ

Tìm Phần Tử Xuất Hiện Nhiều Nhất Trong Mảng C++

Tìm phần tử xuất hiện nhiều nhất trong mảng là một vấn đề phổ biến trong lập trình C++. Để giải quyết vấn đề này, bạn có thể sử dụng một số phương pháp khác nhau như sử dụng bảng băm (hash table), sắp xếp mảng và duyệt qua mảng. Cùng techacademy đi tìm hiểu chi tiết chủ đề này ngay bài viết bên dưới đây nhé. I. Tìm Phần Tử Xuất Hiện Nhiều Nhất Trong Mảng C++ Trong lập trình C++, việc tìm ra phần tử xuất hiện nhiều nhất trong một mảng là một vấn đề phổ biến và quan trọng. Điều này thường được thực hiện thông qua việc sử dụng các thuật toán và cấu trúc dữ liệu phù hợp. Chúng ta sẽ thảo luận về cách thực hiện điều này một cách hiệu quả trong ngôn ngữ lập trình C++. 1. Sử dụng Bảng Băm (Hash Map): Một cách phổ biến để giải quyết vấn đề này là sử dụng bảng băm. Chúng ta có thể duyệt qua mảng, đếm số lần xuất hiện của mỗi phần tử và lưu trữ chúng trong một bảng băm. 2. Sắp Xếp và Đếm: Một cách khác là sắp xếp mảng và sau đó duyệt qua mảng để đếm số lần xuất hiện của mỗi phần tử liên ti