hocvietcode.com
  • Trang chủ
  • Học lập trình
    • Lập trình C/C++
    • Lập trình HTML
    • Lập trình Javascript
      • Javascript cơ bản
      • ReactJS framework
      • AngularJS framework
      • Typescript cơ bản
      • Angular
    • Lập trình Mobile
      • Lập Trình Dart Cơ Bản
        • Dart Flutter Framework
    • Cơ sở dữ liệu
      • MySQL – MariaDB
      • Micrsoft SQL Server
      • Extensible Markup Language (XML)
      • JSON
    • Lập trình PHP
      • Lập trình PHP cơ bản
      • Laravel Framework
    • Lập trình Java
      • Java Cơ bản
    • Cấu trúc dữ liệu và giải thuật
    • Lập Trình C# Cơ Bản
    • Machine Learning
  • WORDPRESS
    • WordPress cơ bản
    • WordPress nâng cao
    • Chia sẻ WordPress
  • Kiến thức hệ thống
    • Microsoft Azure
    • Docker
    • Linux
  • Chia sẻ IT
    • Tin học văn phòng
      • Microsoft Word
      • Microsoft Excel
    • Marketing
      • Google Adwords
      • Facebook Ads
      • Kiến thức khác
    • Chia sẻ phần mềm
    • Review công nghệ
    • Công cụ – tiện ích
      • Kiểm tra bàn phím online
      • Kiểm tra webcam online
Đăng nhập
  • Đăng nhập / Đăng ký

Please enter key search to display results.

Home
  • Java Cơ bản
Biến, kiểu dữ liệu và toán tử trong Java

Biến, kiểu dữ liệu và toán tử trong Java

  • 25-07-2023
  • Toanngo92
  • 0 Comments

Mục lục

  • Giới thiệu chung
  • Biến
    • Quy tắc đặt tên biến
    • Gán giá trị cho biến
    • Các kiểu biến khác nhau
    • Phạm vi của biến
    • Suy luận kiểu biến cục bộ
    • Kiểu dữ liệu
    • Các kiểu dữ liệu nguyên thủy
    • Các kiểu dữ liệu số nguyên (Integer)
    • Các kiểu dữ liệu dấu phẩy động/số thực (float)
    • Kiểu dữ liệu ký tự (character)
    • Kiểu dữ liệu luận lý (Boolean)
    • Kiểu dữ liệu chuỗi (String)
  • Các kiểu dữ liệu tham chiếu
  • Literals
      • Integer literals
      • Floating-Point Literals
      • Boolean Literal
      • Character Literals
      • Null Literals
      • String Literals
  • Ký tự gạch dưới trong Numeric Literals
  • Escape Sequences
  • Hằng số và kiểu dữ liệu liệt kê (enumerations)
  • Formated output và input
    • Phương thức print() và println()
    • Phương thức printf()
    • Phương thức format()
    • Nhập vào theo định dạng (Formated Input)
  • Toán tử (Operator)
    • Toán tử gán
    • Toán tử số học
    • Toán tử một ngôi
    • Toán tử điều kiện/so sánh
    • Toán tử logic
    • Toán tử Bitwise
    • Toán tử 3 ngôi
    • Thứ tự ưu tiên của toán tử
    • Tính kết hợp của toán tử
  • Ép kiểu dữ liệu
    • Ép kiểu ngầm định
    • Ép kiểu tường minh

Giới thiệu chung

Cốt lõi của bất kỳ ngôn ngữ lập trình nào là cách nó lưu trữ và thao tác dữ liệu. Ngôn ngữ lập trình Java có thể hoạt động với các loại dữ liệu khác nhau, chẳng hạn như số, ký tự, luận lý, v.v. Để làm việc với các loại dữ liệu này, ngôn ngữ lập trình Java hỗ trợ khái niệm biến. Một biến giống như một thùng chứa trong bộ nhớ chứa dữ liệu được sử dụng bởi chương trình Java. Nó là một định danh có giá trị có thể thay đổi được.

Biến được liên kết với một kiểu dữ liệu định nghĩa kiểu dữ liệu sẽ được lưu trữ trong biến.

Java là một ngôn ngữ chặt chẽ, bất kỳ biến hoặc đối tượng nào được tạo từ một lớp phải thuộc về kiểu của nó và phải lưu trữ cùng một loại dữ liệu. Trình biên dịch kiểm tra tất cả các biến biểu thức và tham số để đảm bảo rằng chúng tương thích với kiểu dữ liệu của chúng. Trong trường hợp nếu phát hiện có lỗi hoặc không khớp thì phải sửa chúng trong thời gian biên dịch. Điều này làm giảm các lỗi thời gian chạy xảy ra ở các ngôn ngữ khác do loại dữ liệu không khớp.

Biến

Biến là một vị trí trong bộ nhớ của máy tính lưu trữ dữ liệu được sử dụng trong chương trình Java.

Biến được sử dụng trong chương trình Java để lưu trữ dữ liệu thay đổi trong quá trình thực thi chương trình. Chúng là những đơn vị lưu trữ cơ bản trong một chương trình Java. Các biến có thể được khai báo để lưu trữ các giá trị, chẳng hạn như tên, địa chỉ và chi tiết lương. Chúng phải được khai báo trước khi chúng có thể được sử dụng trong chương trình.

Cú pháp:

datatype variableNane;

Trong đó:

  • datatype: kiểu dữ liệu hợp lệ trong Java.
  • variableName: tên biến hợp lệ.

Ví dụ:

int rollNumber;
char grade;

Quy tắc đặt tên biến

Ngôn ngữ lập trình Java cung cấp tập hợp các quy tắc và quy ước phải tuân theo để đặt tên biến. Ví dụ, tên biến nên ngắn gọn và có ý nghĩa. Việc sử dụng các quy ước đặt tên đảm bảo thực hành lập trình tốt và dẫn đến ít lỗi cú pháp hơn.

Các quy tắc và quy ước đặt tên biến như sau:

Tên biến có thể bao gồm các chữ cái và chữ số Unicode, dấu gạch dưới (_) và ký hiệu đô la ($).

Tên của biến phải bắt đầu bằng một chữ cái, ký hiệu đô la ($) hoặc ký tự gạch dưới (_)

Tuy nhiên, theo phong cách code phổ biến, quy ước code khi đặt tên luôn bắt đầu tên biến của bạn bằng một chữ cái, không phải ‘$’ hoặc ‘_’.

Tên biến không được là từ khóa hay từ dành riêng trong Java

Tên biến trong Java phân biệt chữ hoa chữ thường (ví dụ: tên biến số và Số đề cập đến hai biến khác nhau)

Nếu tên biến bao gồm một từ duy nhất, thì tên đó phải ở dạng chữ thường (ví dụ: velocity hoặc ratio).

Nếu tên biến bao gồm nhiều hơn một từ, chữ cái đầu tiên của mỗi từ tiếp theo phải được viết hoa (ví dụ: employeeNumber và accountBalance).

Ví dụ:

Tên biếnHợp lệ/không hợp lệ
rollNumberHợp lệ
a34x_b23Hợp lệ
$abc_defhợp lệ
_2010_taxhợp lệ
$$_hợp lệ
abc#Ghikhông hợp lệ
Integerkhông hợp lệ
4shortkhông hợp lệ

Gán giá trị cho biến

Các giá trị có thể được gán cho các biến bằng cách sử dụng toán tử gán (=) giá trị cho các biến như sau:

Có hai cách để gán giá trị cho biến

Tại thời điểm khai báo biến

Ví dụ:

int rollNumber = 150;
char grade = 'A';

Sau khi khai báo biến

int rollNumber;
rollNumber = 150;

Ở đây, biến rollNumber được khai báo trước và sau đó, theo yêu cầu của biến trong mã, nó được khởi tạo bằng chữ số 101.

Ngooài ra, một số hàm nâng cao mô tả như sau:

// declares three integer variables x, y, and z
int x,y,z;
//Declares three integer variables, initializes a and c
int a = 5 , b, c=10;
//Declares a byte variable numand initializes its value to 20
byte num = 20;
//Declares the character variable n with value 'c'
char n = 'c';
// Stores value 10 in num1 and num2
int num2;
int num1 = num2 = 10;

Lưu ý – trong Java, một biến phải được khai báo trước khi nó có thể được sử dụng trong chương trình. Do đó, Java có thể được gọi là ngôn ngữ lập trình có phong cách lập trình với cú pháp chặt chẽ

Các kiểu biến khác nhau

Ngôn ngữ lập trình Java cho phép bạn xác định các kiểu biến khác nhau. Các biến này được phân loại như sau:

  • Instance variables
  • Static variables
  • Local variables

Chúng được mô tả như sau:

Instance variables (biến thực thể/biến thể hiện): Trạng thái của một đối tượng được biểu diễn dưới dạng các trường hoặc thuộc tính hoặc biến thể hiện trong định nghĩa lớp. Mỗi đối tượng được tạo từ một lớp chứa các biến thể hiện riêng của nó. Nói cách khác, mỗi đối tượng sẽ có bản sao biến đối tượng riêng.

Hình dưới mô phỏng các biến thực thể được khai báo trong một khuôn mẫu lớp. Tất cả các đối tượng từ lớp chứa các biến đối tượng riêng của chúng là các trường không tĩnh.

Static variables (Biến tĩnh): Đây còn được gọi là biến lớp. Chỉ có một bản sao của biến tĩnh. ‘được duy trì trong bộ nhớ được chia sẻ bởi tất cả các đối tượng thuộc lớp đó. Các trường này được khai báo bằng cách sử dụng từ khóa STATIC và thông báo cho trình biên dịch rằng chỉ có một bản sao của biến này tồn tại bất kể số lần lớp đã được khởi tạo.

Local variables (biến cục bộ): Các biến được khai báo trong các khối hoặc phương thức của một lớp được gọi là biến cục bộ. Một phương thức đại diện cho hành vi của một đối tượng. Các biến cục bộ có thể nhìn thấy trong các phương thức đó và không thể truy cập được bên ngoài chúng. Một phương thức lưu trữ trạng thái tạm thời của nó trong các biến cục bộ. Không có từ khóa đặc biệt nào để khai báo một biến cục bộ, do đó, vị trí khai báo của biến khiến nó trở thành biến cục bộ.

Phạm vi của biến

Trong Java, các biến có thể được khai báo trong một lớp, phương thức hoặc trong bất kỳ khối nào. Các ranh giới của khối, nghĩa là mở và đóng các dấu ngoặc nhọn xác định phạm vi của các biến trong Java. Một phạm vi xác định Khả năng hiển thị của các biến đối với phần khác của chương trình. Mỗi khi một khối được xác định, nó sẽ tạo ra một phạm vi mới.
Tương tự, thời gian tồn tại của một biến xác định khoảng thời gian mà biến đó tồn tại trong một chương trình.

Các ngôn ngữ khác, chẳng hạn như C và C++ xác định khả năng hiển thị hoặc phạm vi của một biến trong hai loại. Đây là toàn cầu và địa phương. Trong Java, hai phạm vi chính của một biến được định nghĩa trong một lớp hoặc trong một phương thức.

Các biến được khai báo trong lớp có thể là biến thể hiện hoặc biến tĩnh. Các biến thể hiện được sở hữu bởi các đối tượng của lớp. Do đó, sự tồn tại hoặc phạm vi của chúng phụ thuộc vào việc tạo đối tượng. Tương tự, các biến tĩnh được chia sẻ giữa các đối tượng và tồn tại trong suốt thời gian tồn tại của một lớp.

Suy luận kiểu biến cục bộ

Các biến được định nghĩa trong các phương thức của một lớp là các biến cục bộ. Thời gian tồn tại của các biến này phụ thuộc vào việc thực thi các phương thức. Điều này có nghĩa là bộ nhớ được phân bổ cho các biến khi phương thức được gọi và bị hủy khi phương thức trả về. Sau khi các biến bị hủy, chúng không còn tồn tại nữa.

Các phương thức cũng có tham số. Tham số là các biến được khai báo với phương thức. Chúng giữ các giá trị được truyền cho chúng trong khi gọi phương thức. Các biến tham số cũng được coi là biến cục bộ. Điều đó có nghĩa là chúng tồn tại cho đến khi quá trình thực thi phương thức hoàn tất.

package main;

public class ScopeOfVariable {
	public static void main(String[] args) {
		int x;
		x = 10;
		{
			// x can accessible within main() block
			int y = 20; // y only accessible in this block
			System.out.println("x and y:" + x + " "+y);
			x = y * 2;
		}
	}
}

Kiểu dữ liệu

Khi bạn định nghĩa một biến trong Java, bạn phải thông báo cho trình biên dịch biến đó là loại gì. Đó là, liệu nó có được lưu trữ một số nguyên, một ký tự hay một số loại dữ liệu khác hay không. Thông tin này cho trình biên dịch biết cần phân bổ bao nhiêu dung lượng trong bộ nhớ tùy thuộc vào kiểu dữ liệu của một biến.

Do đó, các kiểu dữ liệu xác định loại dữ liệu có thể được lưu trữ trong các biến và thao tác có thể được thực hiện trên chúng.

Trong Java, các kiểu dữ liệu thuộc hai loại như sau:

  • Kiểu dữ liệu nguyên thủy (Primitive data types)
  • Kiểu dữ liệu tham chiếu (Reference data types)

Các kiểu dữ liệu nguyên thủy

Ngôn ngữ lập trình Java cung cấp tám kiểu dữ liệu nguyên thủy để lưu trữ dữ liệu trong các chương trình Java. Kiểu dữ liệu nguyên thủy, còn được gọi là kiểu dữ liệu dựng sẵn, lưu trữ một giá trị tại một thời điểm, chẳng hạn như một số hoặc một ký tự. Kích thước của mỗi loại dữ liệu sẽ giống nhau trên tất cả các máy khi thực thi chương trình Java.

Các kiểu dữ liệu nguyên thủy được xác định trước bằng ngôn ngữ Java và được xác định là các từ dành riêng.

Mô phỏng kiểu dữ liệu nguyên thủy Java

Các kiểu dữ liệu số nguyên (Integer)

Các kiểu dữ liệu số nguyên được Java hỗ trợ là byte, short, int và long. Các kiểu dữ liệu này có thể lưu trữ các giá trị số nguyên đã ký. Số nguyên có dấu là những số nguyên có khả năng biểu thị số dương cũng như số âm, chẳng hạn như -40.

Các ngôn ngữ, chẳng hạn như C hoặc C++, hỗ trợ số nguyên có dấu và không dấu, nhưng Java không hỗ trợ

  • byte – Được sử dụng để lưu trữ một lượng nhỏ dữ liệu. Đây là loại 8:bit có dấu và có thể lưu trữ các giá trị nằm trong khoảng từ -128 đến 127. Điều này hữu ích khi làm việc với luồng dữ liệu từ mạng hoặc tệp. Dữ liệu này
  • short – Loại dữ liệu này ít được sử dụng nhất. Nó là loại 16-bit có dấu và có thể lưu trữ các giá trị nằm trong khoảng từ 32,768 đến 32,767, Loại này chủ yếu áp dụng cho các máy tính 16-bit. Kiểu dữ liệu này được sử dụng để lưu trữ các số nhỏ hơn, ví dụ: mã số nhân viên. ngắn. từ khóa được sử dụng để khai báo một biến ngắn.
  • int – Đây là kiểu dữ liệu được sử dụng phổ biến nhất để lưu trữ các số nguyên. Đây là loại 32 bit có dấu và có thể lưu trữ các giá trị nằm trong khoảng từ -2.147.483.648 đến 2.147.483.647. Đây là kiểu dữ liệu linh hoạt và hiệu quả nhất. Nó có thể được sử dụng để lưu trữ tổng số tiền lương được trả cho tất cả các nhân viên của công ty. Từ khóa int được sử dụng để khai báo một biến số nguyên.
  • long – itis a signed 64-bit type and can store values ranging from -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807. It is useful when an int type is not large enough to hold the desired value. The range of value a long data type can store is quite large for example, population of a country. long keyword is used to declare long variables for storing large numeric values.

Các kiểu dữ liệu dấu phẩy động/số thực (float)

Các kiểu dữ liệu dấu chấm động được Java hỗ trợ là float và double.

  • float – Loại này hỗ trợ một giá trị chính xác duy nhất với bộ nhớ 32 bit. Chúng hữu ích khi một số yêu cầu một thành phần phân số, nhưng với độ chính xác thấp hơn. Ví dụ: biểu diễn tiền bằng đô la và xu được yêu cầu phải ở dạng giá trị dấu phẩy động. Cái phao. từ khóa is, được sử dụng để lưu trữ các giá trị float. Ví dụ, float squRoot, cubeRoot;
  • double – Loại này hỗ trợ độ chính xác kép với bộ lưu trữ 64 bit. Độ chính xác kép là bộ xử lý fon nhanh hơn được tối ưu hóa cho các phép tính toán học. Loại dữ liệu này hữu ích khi cần duy trì độ chính xác trong khi thực hiện các phép tính. Từ khóa kép được sử dụng để lưu trữ các số có giá trị lớn. Ví dụ: nhân đôi số thập phân lớn.

Kiểu dữ liệu ký tự (character)

kiểu dữ liệu char thuộc nhóm này và đại diện cho các ký hiệu trong một bộ ký tự như chữ cái và số. kiểu dữ liệu char lưu trữ ký tự Unicode 16 bit và giá trị của nó nằm trong khoảng từ 0 (‘\10000″) đến 65,535 (‘\ueeee’).

Unicode là bộ ký tự 16 bit, chứa tất cả các ký tự thường dùng trong xử lý thông tin. Đó là một nỗ lực để hợp nhất các bảng chữ cái của các ngôn ngữ khác nhau trên thế giới thành một bộ ký tự quốc tế và duy nhất.

Kiểu dữ liệu luận lý (Boolean)

kiểu dữ liệu boolean thuộc nhóm này và đại diện cho các giá trị đúng hoặc sai. Loại dữ liệu này được sử dụng để theo dõi các điều kiện true/false. Kích thước của nó không được xác định chính xác.

Kiểu dữ liệu chuỗi (String)

Ngoài các kiểu dữ liệu nguyên thủy, ngôn ngữ lập trình Java cũng hỗ trợ các chuỗi. Một chuỗi là một chuỗi các ký tự. Java không cung cấp bất kỳ kiểu dữ liệu nguyên thủy nào để lưu trữ các chuỗi, thay vào đó cung cấp một lớp String để tạo các biến chuỗi. Lớp String được định nghĩa trong gói java.lang trong Java SE API.

String str="AStringData";

Câu lệnh, String str tạo một đối tượng String và không phải là kiểu dữ liệu nguyên thủy. Khi bạn đặt một giá trị chuỗi trong dấu ngoặc kép, môi trường thời gian chạy Java sẽ tự động tạo một đối tượng kiểu Chuỗi. Ngoài ra, khi biến String được tạo với giá trị “A String Data”, nó sẽ không đổi và bạn không thể thay đổi giá trị của biến trong chương trình. Tuy nhiên, việc khởi tạo biến chuỗi với giá trị mới sẽ tạo ra một đối tượng Chuỗi mới. Hành vi này của các chuỗi làm cho chúng trở thành các đối tượng bất biến.

Ví dụ:

public class PrimitiveExample {
    public static void main(String[] args) {
        // Integer types
        byte myByte = 10;
        short myShort = 20;
        int myInt = 30;
        long myLong = 40L;

        // Floating-point types
        float myFloat = 3.14f;
        double myDouble = 2.71828;

        // Character type
        char myChar = 'A';

        // Boolean type
        boolean myBoolean = true;

        // Print the values
        System.out.println("Byte: " + myByte);
        System.out.println("Short: " + myShort);
        System.out.println("Int: " + myInt);
        System.out.println("Long: " + myLong);
        System.out.println("Float: " + myFloat);
        System.out.println("Double: " + myDouble);
        System.out.println("Char: " + myChar);
        System.out.println("Boolean: " + myBoolean);
    }
}

Output:

Byte: 10
Short: 20
Int: 30
Long: 40
Float: 3.14
Double: 2.71828
Char: A
Boolean: true

Các kiểu dữ liệu tham chiếu

Trong Java, các đối tượng và mảng được gọi là các biến tham chiếu. Khi một đối tượng hoặc một mảng được tạo, một lượng bộ nhớ nhất định được gán cho nó và địa chỉ của khối bộ nhớ này được lưu trong biến tham chiếu. Nói cách khác, kiểu dữ liệu tham chiếu là một địa chỉ của một đối tượng hoặc một mảng được tạo trong bộ nhớ.

Liệt kê và mô tả ba loại dữ liệu tham chiếu ở bảng dưới:

Kiểu dữ liệuMô tả
ArrayNó là một tập hợp của một số mục có cùng kiểu dữ liệu. Ví dụ, tên của các sinh viên trong một lớp có thể được lưu trữ trong một mảng
ClassNó là sự đóng gói của các biến đối tượng (thuộc tính) và các phương thức đối tượng
InterfaceNó là một loại lớp trong Java được sử dụng để thực hiện kế thừa

Literals

Literals là các mục dữ liệu có giá trị cố định hoặc không đổi. Do đó, chúng ta cũng gọi Literals là hằng số trong Java. Literal đại diện cho một giá trị cố định được gán cho một biến. Nó được thể hiện trực tiếp trong mã và không yêu cầu tính toán.

Một số literal cho các kiểu dữ liệu nguyên thủy:

IntegerFloatCharacterBoolean
5035.7F‘C’true

Một literal được sử dụng bất cứ nơi nào một giá trị của loại của nó được cho phép. Tuy nhiên, có một số loại nghĩa đen khác nhau. Một số trong số chúng là:

Integer literals

Các ký tự số nguyên được sử dụng để biểu thị một giá trị int, mà trong Java là một giá trị số nguyên 32 bit. Trong một chương trình, số nguyên có lẽ là loại được sử dụng phổ biến nhất. Bất kỳ giá trị số nguyên nào cũng được coi là một integer literal

Integers literals có thể được biểu diễn dưới dạng:

Giá trị thập phân có cơ số là 10 và bao gồm các số từ 0 đến 9. Ví dụ: int decNum = 56;

Các giá trị thập lục phân có cơ số là 16 và bao gồm các số từ 0 đến 9 và các chữ cái A đến F. Ví dụ, int hexNum = 0x1c;

Các giá trị nhị phân có cơ số là 2 và bao gồm các số 0 và 1. Java SE 7 hỗ trợ các ký tự nhị phân. Ví dụ: int binNum = 0b0010;

Một số nguyên cũng có thể được gán cho các kiểu số nguyên khác, chẳng hạn như byte hoặc long. Khi một giá trị bằng chữ được gán cho một biến byte hoặc short, không có lỗi nào được tạo ra nếu giá trị literal nằm trong phạm vi của loại mục tiêu. Các số nguyên có thể được biểu thị bằng một ký tự viết hoa tùy chọn (‘L’) hoặc ký tự viết thường (‘l’) ở cuối, ký tự này cho máy tính coi số đó là một số long (số nguyên 64 bit)

Floating-Point Literals

Floating-point literals đại diện cho các giá trị thập phân với một thành phần phân số. Floating-point literals có một số phần:

  • Thành phần số nguyên, ví dụ 0, 1, 2)… 9.
  • Dấu thập phân, ví dụ 4.90, 3.141, v.v.
  • Số mũ được biểu thị bằng chữ E hoặc e theo sau là số thập phân, có thể dương hoặc âm. Ví dụ: e+208, 7.436E6, 23763E-05
  • Hậu tố, D, d , F hoặc f

Chữ dấu phẩy động trong Java mặc định có độ chính xác gấp đôi. Một chữ nổi được biểu thị bằng F hoặc f được thêm vào giá trị và một chữ kép được biểu thị bằng D hoặc d.

Boolean Literal

Boolean literals rất đơn giản và chỉ có hai giá trị logic – true và false. Các giá trị này không chuyển đổi thành bất kỳ biểu diễn số nào. Một chữ boolean thực sự trong Java không bằng một, cũng không phải chữ fale bằng không. Chúng chỉ có thể được gán cho các biến boolean hoặc được sử dụng trong các biểu thức với các toán tử boolean.

Character Literals

Chữ ký tự được đặt trong dấu nháy đơn. Tất cả các ký tự ASCII hiển thị có thể được đặt trực tiếp trong dấu ngoặc kép, chẳng hạn như ‘, ‘g’,’$’ và ‘z’. Các ký tự đơn không thể được đặt trong dấu ngoặc đơn được sử dụng với escape sequence

Null Literals

‘Khi một đối tượng được tạo, một lượng bộ nhớ nhất định sẽ được phân bổ cho đối tượng đó. Địa chỉ bắt đầu của bộ nhớ được phân bổ được lưu trữ trong một biến đối tượng, nghĩa là một biến tham chiếu.
Tuy nhiên, đôi khi, biến tham chiếu không mong muốn tham chiếu đến đối tượng đó. Trong trường hợp như vậy, biến tham chiếu được gán giá trị bằng chữ null.

Ví dụ:

Car toyota = null;

String Literals

String literals bao gồm chuỗi các ký tự được đặt trong dấu ngoặc kép. Ví dụ: “wielcome to Java”, “Hello\nworld”.

Ký tự gạch dưới trong Numeric Literals

Java cho phép bạn thêm các ký tự gạch dưới (_) giữa các chữ số của một chữ số. Ký tự gạch dưới chỉ có thể được sử dụng giữa các chữ số.

Chữ nguyên vẹn, ký tự gạch dưới có thể được cung cấp cho số điện thoại, số nhận dạng hoặc số bộ phận, v.v. Tương tự, đối với các chữ số dấu phẩy động, dấu gạch dưới được sử dụng giữa các giá trị thập phân lớn.

Việc sử dụng ký tự gạch dưới theo nghĩa đen giúp cải thiện khả năng đọc của chương trình Java.

Các hạn chế đối với việc sử dụng dấu gạch dưới trong chữ số như sau:

  • Một số không thể bắt đầu hoặc kết thúc bằng dấu gạch dưới.
  • Trong chữ dấu phẩy động, dấu gạch dưới không được đặt liền kề với dấu thập phân.
  • Không thể đặt dấu gạch dưới trước hậu tố, L hoặc F
  • Không thể đặt dấu gạch dưới trước hoặc sau mã định danh nhị phân hoặc thập lục phân, chẳng hạn như b hoặc x

Danh sách Bảng hiển thị vị trí hợp lệ và không hợp lệ của ký tự gạch dưới:

Numeric LiteralValid/Invalid
1234_9876_5012_5454LValid
_8976Invalid do dấu gạch dưới được đặt ở đầu
3.14_15FValid
0b11010000_11110000_00001111Valid
3.14_15F Invalid vì dấu gạch dưới liền kề với dấu thập phân
0x_78Invalid vì dấu gạch dưới được đặt sau hệ thập lục phân

Escape Sequences

Các Escape Sequences có thể được sử dụng cho ký tự và chuỗi ký tự. Một Escape Sequences Là một dãy ký tự đặc biệt được dùng để biểu diễn các ký tự, không thể nhập trực tiếp vào một chuỗi. Ví dụ: để bao gồm các khoảng trống tab hoặc một ký tự dòng mới trong một dòng hoặc để bao gồm các ký tự có ký hiệu khác trong chương trình Java (\ hoặc “), các Escape Sequences được sử dụng.

Escape Sequences bắt đầu bằng ký tự gạch chéo ngược (\), biểu thị rằng (các) ký tự theo sau phải được xử lý theo cách đặc biệt. Đầu ra được hiển thị bởi Java có thể được định dạng với sự trợ giúp của các ký tự Escape Sequences.

Danh sách escape sequence:

Ví dụ:

System.out.println("Hello\nWorld");
System.out.println("Name:\tJohn");
System.out.println("C:\\path\\to\\file");
System.out.println("She said, \"Hello!\"");
System.out.println('I\'m happy.');

Output:

Hello
World
Name:    John
C:\path\to\file
She said, "Hello!"
I'm happy.

Hằng số và kiểu dữ liệu liệt kê (enumerations)

Xét một đoạn mã tính diện tích hình tròn. Để tính diện tích hình tròn, giá trị của PI và bán kính phải được cung cấp trong công thức. Giá trị của PI là một giá trị không đổi. Giá trị này sẽ không thay đổi bất kể giá trị được cung cấp cho bán kính.

Tương tự, các hằng số trong Java là các giá trị cố định được gán cho các mã định danh không bị sửa đổi trong suốt quá trình thực thi mã. Chúng được xác định khi bạn muốn giữ lại các giá trị để sử dụng lại chúng sau này hoặc để ngăn bất kỳ sửa đổi nào đối với các giá trị. Trong Java, việc khai báo các biến hằng được bắt đầu bằng từ khóa final. Khi biến hằng được khởi tạo với một giá trị, bất kỳ nỗ lực thay đổi giá trị nào trong chương trình sẽ tạo ra lỗi biên dịch.

Cú pháp:

final data_type variable_name=value;

Ví dụ:

public class ConstantsExample {
    public static final int MAX_COUNT = 100;
    public static final double PI = 3.14159;
    public static final String GREETING = "Hello, World!";
    
    public static void main(String[] args) {
        System.out.println("Max count: " + MAX_COUNT);
        System.out.println("PI value: " + PI);
        System.out.println("Greeting: " + GREETING);
    }
}

Output:

Max count: 100
PI value: 3.14159
Greeting: Hello, World!

Lưu ý – Từ khóa cuối cùng cũng có thể được áp dụng ở cấp độ phương thức hoặc lớp. Khi được áp dụng cho một phương thức, thì nó không thể bị ghi đè. Khi được áp dụng cho một khai báo lớp, thì lớp đó không thể được mở rộng.

Java SE 5.0 đã giới thiệu kiểu liệt kê (enumeration). Một kiểu liệt kê được định nghĩa là một danh sách chứa các hằng số. Trong các ngôn ngữ trước đây, như C++, kiểu dữ liệu liệt kê là một danh sách các hằng số nguyên được đặt tên, nhưng trong Java, kiểu dữ liệt kê là một kiểu lớp. Điều này có nghĩa là nó có thể chứa các biến thực thể, phương thức và hàm khởi tạo. Kết quả là, khái niệm liệt kê đã được mở rộng trong Java. Kiểu dữ liệu liệt kê được tạo bằng cách sử dụng từ khóa enum.

Cú pháp:

enum enum_name {
constant1, constant2, ..., constant
}

Mặc dù, enum là một lớp trong Java, nhưng chúng ta không sử dụng toán tử new để khởi tạo nó. Thay vào đó, hãy khai báo biến kiểu liệt kê để sử dụng nó trong chương trình Java. Điều này tương tự như việc sử dụng các kiểu dữ liệu nguyên thủy. Kiểu dữ liệu liệt kê chủ yếu được sử dụng với các cấu trúc ra quyết định, chẳng hạn như câu lệnh trường hợp chuyển đổi.

Ví dụ:

public class EnumExample {
    enum Day {
        MONDAY,
        TUESDAY,
        WEDNESDAY,
        THURSDAY,
        FRIDAY,
        SATURDAY,
        SUNDAY
    }
    
    public static void main(String[] args) {
        Day today = Day.WEDNESDAY;
        
        switch (today) {
            case MONDAY:
            case TUESDAY:
            case WEDNESDAY:
            case THURSDAY:
            case FRIDAY:
                System.out.println("It's a weekday.");
                break;
            case SATURDAY:
            case SUNDAY:
                System.out.println("It's a weekend.");
                break;
        }
    }
}

Formated output và input

Khi nào một đầu ra được hiển thị trên màn hình, nó cần phải được định dạng. Định dạng có thể được thực hiện như sau:

  • print và println
  • printf
  • format()

Các phương thức này hoạt động tương tự nhau. Phương thức format() sử dụng java.util.Formatter để thực hiện công việc định dạng.

Phương thức print() và println()

Các phương thức này chuyển đổi tất cả dữ liệu thành chuỗi và hiển thị dưới dạng một giá trị. Các phương thức sử dụng phương thức tostring() thích hợp để chuyển đổi các giá trị. Các phương thức này cũng có thể được sử dụng để in tổ hợp hỗn hợp của chuỗi và giá trị số dưới dạng chuỗi trên đầu ra tiêu chuẩn.

Ví dụ:

public class DisplaySum {
    public static void main(String[] args) {
        int num1 = 42;
        int num2 = 107;
        int sum = num1 + num2;
        
        System.out.print("The sum of ");
        System.out.print(num1);
        System.out.print(" and ");
        System.out.print(num2);
        System.out.print(" is ");
        System.out.print(sum);
        System.out.println();
        
        int num3 = 15;
        sum = num1 + num2 + num3;
        
        System.out.println("The sum of " + num1 + ", " + num2 + ", and " + num3 + " is " + sum + ".");
    }
}

Phương thức printf()

Phương thức printf() có thể được sử dụng để định dạng đầu ra số cho màn hình đen

Một số format specifier (bổ từ định dạng):

Format SpecifierDescription
%dKết quả được định dạng dưới dạng số nguyên thập phân
%fKết quả được định dạng là số thực
%oKết quả được định dạng dưới dạng số bát phân
%eKết quả được định dạng dưới dạng số thập phân trong ký hiệu khoa học
%nKết quả được hiển thị trong một dòng mới

Ví dụ:

public class PrintfExample {
    public static void main(String[] args) {
        String name = "Alice";
        int age = 25;
        double height = 1.65;
        
        System.out.printf("Name: %s, Age: %d, Height: %.2f meters\n", name, age, height);
        
        int number = 42;
        System.out.printf("The answer is %d\n", number);
        
        double pi = Math.PI;
        System.out.printf("The value of pi is approximately %.4f\n", pi);
    }
}

Phương thức format()

Phương thức này định dạng nhiều đối số dựa trên một chuỗi định dạng. Chuỗi định dạng bao gồm thông tin ký tự chuỗi bình thường được liên kết với các chỉ định định dạng và danh sách đối số.

%[arg_index$] [flags] [width] [.precision] conversion character

Trong đó:

arg_index: một số nguyên theo sau là ký hiệu $. Số nguyên chỉ ra rằng đối số sẽ được in ở vị trí đã đề cập.

flags: Là tập hợp các ký tự định dạng kết quả xuất ra. Có các cờ khác nhau có sẵn trong Java.

FlagDescription
“-“Căn trái
“+”Bao gồm một dấu (+ hoặc -) với đối số này
“0”Đệm đối số này bằng số 0
“,”Sử dụng dấu tách nhóm theo ngôn ngữ cụ thể
“(“Đặt số âm trong ngoặc đơn

width: Cho biết số lượng ký tự tối thiểu được in và không được âm.

precision: Cho biết số chữ số được in sau dấu thập phân. Được sử dụng với số dấu phẩy động.

conversion character: Chỉ định loại đối số sẽ được định dạng. Ví dụ: b cho boolean, cho char, d cho số nguyên, f cho dấu phẩy động và s cho chuỗi.

Các giá trị trong ‘[]’ là tùy chọn. Các yếu tố bắt buộc duy nhất của trình xác định định dạng là % và ký tự chuyển đổi.

Ví dụ:

public class FormatExample {
    public static void main(String[] args) {
        String name = "Alice";
        int age = 25;
        double height = 1.65;
        
        String formattedString = String.format("Name: %s, Age: %d, Height: %.2f meters", name, age, height);
        System.out.println(formattedString);
        
        int number = 42;
        formattedString = String.format("The answer is %d", number);
        System.out.println(formattedString);
        
        double pi = Math.PI;
        formattedString = String.format("The value of pi is approximately %.4f", pi);
        System.out.println(formattedString);
    }
}

Ví dụ 2:

public class FormatFlagsExample {
    public static void main(String[] args) {
        int number = -42;
        double value = 1234.56789;

        // Use "+" flag to display sign for positive and negative numbers
        String formattedNumberWithSign = String.format("Number with sign: %+d", number);
        System.out.println(formattedNumberWithSign);

        // Use "-" flag to left-justify the text (width = 10)
        String formattedLeftJustifiedText = String.format("Left-justified text: %-10s", "Hello");
        System.out.println(formattedLeftJustifiedText);

        // Use "0" flag to pad the number with leading zeros (width = 6)
        String formattedNumberWithLeadingZeros = String.format("Number with leading zeros: %06d", number);
        System.out.println(formattedNumberWithLeadingZeros);

        // Use "," flag to add a comma as a thousand separator
        String formattedNumberWithCommaSeparator = String.format("Number with comma separator: %,d", 1234567);
        System.out.println(formattedNumberWithCommaSeparator);

        // Use "(" flag to enclose negative numbers in parentheses
        String formattedNumberWithParentheses = String.format("Number with parentheses: %(d", number);
        System.out.println(formattedNumberWithParentheses);

        // Use combination of flags for formatting floating-point number
        String formattedFloatingPointNumber = String.format("Floating-point number: %+010.3f", value);
        System.out.println(formattedFloatingPointNumber);
    }
}

Output:

Number with sign: -42
Left-justified text: Hello     
Number with leading zeros: -0042
Number with comma separator: 1,234,567
Number with parentheses: (42)
Floating-point number: +001234.568

Nhập vào theo định dạng (Formated Input)

Lớp Scanner cho phép người dùng đọc hoặc chấp nhận các giá trị của các loại dữ liệu khác nhau từ bàn phím. Nó chia đầu vào thành các mã thông báo và dịch các mã thông báo riêng lẻ tùy thuộc vào loại dữ liệu của chúng.

Để sử dụng lớp Scanner, chúng ta truyền đối tượng InputStream vào hàm khởi tạo.

Ví dụ:

Scanner input = new Scanner(System.in);

Ở đây, input là một đối tượng của lớp Scanner và Sytem.in là một đối tượng luồng đầu vào (input stream).

Bảng dưới liệt kê các phương thức khác nhau của lớp Scanner có thể được sử dụng để nhận các giá trị số từ ngời dùng:

Phương thứcMô tả
nextByte()Đọc giá trị Byte nhập vào từ người dùng
nextInt()Đọc giá trị Int nhập vào từ người dùng
nextLong()Đọc giá trị Long nhập vào từ người dùng
nextFloat()Đọc giá trị Float nhập vào từ người dùng
nextDouble()Đọc giá trị Double nhập vào từ người dùng

Ví dụ:

import java.util.Scanner;

public class InputExample {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // Reading a byte
        System.out.print("Enter a byte: ");
        byte byteValue = scanner.nextByte();
        System.out.println("You entered: " + byteValue);

        // Reading an integer
        System.out.print("Enter an integer: ");
        int intValue = scanner.nextInt();
        System.out.println("You entered: " + intValue);

        // Reading a long
        System.out.print("Enter a long: ");
        long longValue = scanner.nextLong();
        System.out.println("You entered: " + longValue);

        // Reading a float
        System.out.print("Enter a float: ");
        float floatValue = scanner.nextFloat();
        System.out.println("You entered: " + floatValue);

        // Reading a double
        System.out.print("Enter a double: ");
        double doubleValue = scanner.nextDouble();
        System.out.println("You entered: " + doubleValue);

        scanner.close();
    }
}

Output:

Enter a byte: 100
You entered: 100

Enter an integer: 42
You entered: 42

Enter a long: 12345678900
You entered: 12345678900

Enter a float: 3.14
You entered: 3.14

Enter a double: 3.14159265359
You entered: 3.14159265359

Toán tử (Operator)

Tất cả các ngôn ngữ lập trình cung cấp một số cơ chế để thực hiện các hoạt động khác nhau trên dữ liệu được lưu trữ trong các biến. Hình thức hoạt động đơn giản nhất liên quan đến số học (chẳng hạn như cộng, chia, v.v.) hoặc so sánh giữa hai hoặc nhiều biến. Một tập hợp các ký hiệu được sử dụng để chỉ ra loại hoạt động sẽ được thực hiện trên dữ liệu. Các ký hiệu này được gọi là toán tử.

Xét biểu thức:

z = x + y;

Ký hiệu + trong câu lệnh được gọi là Toán tử và phép toán được thực hiện là phép cộng. Phép toán này được thực hiện trên hai biến x và y, được gọi là Toán hạng. Sự kết hợp của cả toán tử và toán hạng, z = x + y, được gọi là Biểu thức.

Java cung cấp một số loại toán tử và chúng như sau:

  • Toán tử gán
  • Toán tử số học
  • Toán tử một ngôi
  • Toán tử điều kiện
  • Toán tử logic
  • Toán tử Bitwise

Toán tử gán

Toán tử gán cơ bản là một dấu bằng duy nhất, ‘=’. Toán tử này được sử dụng để gán giá trị bên phải của nó cho toán hạng bên trái của nó. Việc gán giá trị cho nhiều biến có thể được thực hiện cùng một lúc. Nói cách khác, nó cho phép bạn tạo một chuỗi các phép gán.

Xem xét các câu lệnh sau:

int balance =3456;
char gender = 'M';

Giá trị 3456 và ‘M’ được gán cho các biến, balance và gender.

Ngoài toán tử gán cơ bản, còn có các toán tử kết hợp cho phép bạn sử dụng một giá trị trong một biểu thức, rồi đặt giá trị của nó thành kết quả của biểu thức đó.

Ví dụ:

int x = 3;
x += 5;

Sau câu lệnh thứ hai giá trị của x là 8, ý nghĩa của câu lệnh là x = x + 5.

Ví dụ:

x=10; // Gán giá trị 10 cho biến x
x+=5; // Tăng giá trị của x lên 5
x-=5; //Giảm giá trị của x xuống 5
x*=5; // Nhân giá trị của x với 5
x/=2; // Chia giá trị của x cho 2
x%=2; // Chia giá trị của x cho 2 và trả về phần dư

Toán tử số học

Các toán tử số học thao tác dữ liệu số và thực hiện các phép toán số học phổ biến trên dữ liệu.
Toán hạng của toán tử số học phải là kiểu số. Toán hạng Boolean không thể được sử dụng, nhưng toán hạng ký tự được cho phép. Các toán tử được đề cập ở đây có bản chất là nhị phân, nghĩa là chúng hoạt động trên hai toán hạng, chẳng hạn như x+y. Ở đây, + Là toán tử nhị phân hoạt động trên x và y.

Bảng dưới liệt kê các toán tử số học:

Toán tửMô tả
+Phép cộng – Trả về tổng của các toán hạng
–Phép trừ – Trả về hiệu của hai toán hạng
*Phép nhân – Trả về tích của các toán hạng
/Phép chia – Trả về kết quả của phép toán chia
%Chia lấy dữ – Trả về phần kết quả dư từ phép chia

Đoạn mã dưới thể hiện việc sử dụng các toán tử số học.

x=2+3; // Trả về 5
y=8-5; // Trả về 3
x=5*2; //Trả về 10
x=5/2; // Trả về 2
y=10%3; //Trả về 1

Toán tử một ngôi

Toán tử một ngôi chỉ yêu cầu một toán hạng. Chúng thực hiện các thao tác khác nhau như tăng giảm giá trị của một biến đi 1, phủ định một biểu thức hoặc đảo ngược giá trị của một biến boolean.

Bảng dưới liệt kê các toán tử một ngôi:

Toán tửMô tả
+Cộng một ngôi – Cho biết giá trị dương
–Trừ một ngôi – Phủ định một biểu thức
++Toán tử tăng – Tăng giá trị của một biến lên 1
—Toán tử giảm – Giảm giá trị của một biến đi 1
!Toán tử phủ định – Đảo ngược một giá trị boolean

Các toán tử ++ và — có thể được áp dụng trước (tiền tố) hoặc sau (hậu tố) toán hạng. Các câu lệnh ++variable và variable++ đều dẫn đến việc tăng giá trị của biến lên 1. Điểm khác biệt duy nhất là phiên bản tiền tố (++variable) sẽ tăng giá trị trước khi đánh giá, trong khi phiên bản hậu tố (variable++) sẽ đánh giá đầu tiên và sau đó tăng giá trị ban đầu.

Ví dụ:

int i = 5;
int j = i++; // j = 5, i = 6
int k = ++i  // k = 6, i = 6
i= -i // i = -6
boolean result = false; // result is false
result = !result; // result is true

Toán tử điều kiện/so sánh

Các toán tử điều kiện kiểm tra mối quan hệ giữa hai toán hạng. Một biểu thức liên quan đến các toán tử có điều kiện luôn đánh giá thành một giá trị boolean (true hoặc false).

Toán tửMô tả
==Kiểm tra sự bằng nhau của hai giá trị
!=Kiểm tra sự khác nhau của hai giá trị
>Kiểm tra xem giá trị bên trái có lớn hơn giá trị bên phải không
<Kiểm tra xem giá trị bên trái có nhỏ hơn giá trị bên phải không
>=Kiểm tra xem giá trị bên trái có lớn hơn hoặc bằng giá trị bên phải không
<=Kiểm tra xem giá trị bên trái có nhỏ hơn hoặc bằng giá trị bên phải không

Ví dụ:

public class ComparisonOperatorsExample {
    public static void main(String[] args) {
        int num1 = 10;
        int num2 = 5;

        // Using comparison operators to compare two values
        System.out.println("num1 == num2: " + (num1 == num2));
        System.out.println("num1 != num2: " + (num1 != num2));
        System.out.println("num1 > num2: " + (num1 > num2));
        System.out.println("num1 < num2: " + (num1 < num2));
        System.out.println("num1 >= num2: " + (num1 >= num2));
        System.out.println("num1 <= num2: " + (num1 <= num2));

        // Using comparison operators with boolean values
        boolean isTrue = true;
        boolean isFalse = false;

        System.out.println("isTrue == isFalse: " + (isTrue == isFalse));
        System.out.println("isTrue != isFalse: " + (isTrue != isFalse));
    }
}

Output:

num1 == num2: false
num1 != num2: true
num1 > num2: true
num1 < num2: false
num1 >= num2: true
num1 <= num2: false
isTrue == isFalse: false
isTrue != isFalse: true

Toán tử logic

Toán tử logic (&& và | |) hoạt động trên hai biểu thức boolean.

Bảng dưới mô tả danh sách toán tử:

Toán tửMô tả
&&AND – Chỉ trả về true nếu cả hai biểu thức đều true
||OR – Trả về true nếu một trong hai biểu thức là true hoặc cả hai biểu thức đều true

Ví dụ:

public class LogicalAndExample {
    public static void main(String[] args) {
        boolean a = true;
        boolean b = false;

        boolean result1 = a && b;
        boolean result2 = a && true;
        boolean result3 = false && true;

        System.out.println("result1: " + result1); // Output: result1: false
        System.out.println("result2: " + result2); // Output: result2: true
        System.out.println("result3: " + result3); // Output: result3: false
    }
}

Ví dụ 2:

public class LogicalOrExample {
    public static void main(String[] args) {
        boolean x = true;
        boolean y = false;

        boolean result1 = x || y;
        boolean result2 = x || false;
        boolean result3 = false || false;

        System.out.println("result1: " + result1); // Output: result1: true
        System.out.println("result2: " + result2); // Output: result2: true
        System.out.println("result3: " + result3); // Output: result3: false
    }
}

Toán tử Bitwise

Các toán tử bitwise hoạt động trên các biểu diễn dữ liệu nhị phân. Các toán tử này được sử dụng để thay đổi các bit riêng lẻ trong một toán hạng.

Bảng dưới liệt kê các toán tử bitwise khác nhau:

Toán tửMô tả
&Bitwise AND – so sánh hai bit và tạo ra kết quả là 1 nếu cả hai bit đều là 1; ngược lại, nó trả về 0
|Bitwise OR – so sánh hai bit và tạo ra kết quả là 1 nếu ít nhất 1 trong 2 bit là 1, nếu không nó trả về 0
^XOR (Exclusive OR) so sánh hai bit và tạo ra kết quả là 1 nếu một trong hai hoặc cả hai bit là 1; ngược lại, nó trả về 0
~Bitwise NOT Sử dụng để đảo ngược tất cả các bit của toán hạng
>>Right Shift – Di chuyển tất cả các bit trong một số sang phải một vị trí giữ nguyên dấu của số âm
<<Left Shift – Di chuyển tất cả các bit trong một số sang trái theo vị trí đã chỉ định

Ví dụ:

public class BitwiseOperatorsExample {
    public static void main(String[] args) {
        int a = 5; // Binary: 0000 0101
        int b = 3; // Binary: 0000 0011

        int bitwiseAndResult = a & b;
        int bitwiseOrResult = a | b;
        int bitwiseXorResult = a ^ b;
        int bitwiseNotA = ~a;
        int leftShiftResult = a << 2;
        int rightShiftResult = a >> 1;
        int unsignedRightShiftResult = a >>> 1;

        System.out.println("Bitwise AND Result: " + bitwiseAndResult); // Output: 1
        System.out.println("Bitwise OR Result: " + bitwiseOrResult);   // Output: 7
        System.out.println("Bitwise XOR Result: " + bitwiseXorResult); // Output: 6
        System.out.println("Bitwise NOT of A: " + bitwiseNotA);        // Output: -6
        System.out.println("Left Shift Result: " + leftShiftResult);   // Output: 20
        System.out.println("Right Shift Result: " + rightShiftResult); // Output: 2
        System.out.println("Unsigned Right Shift Result: " + unsignedRightShiftResult); // Output: 2
    }
}

Toán tử 3 ngôi

Toán tử 3 ngôi (?:) là toán tử viết tắt cho câu lệnh if-else. Nó làm cho mã của bạn nhỏ gọn và dễ đọc hơn.

Cú pháp:

expression1 ? expression2 : expression3

Trong đó

expression1: Đại diện cho một biểu thức đánh giá giá trị boolean là true hoặc false.
expression2: Được thực hiện nếu expression1 ước tính là đúng.
expression3: Được thực thi nếu expression1 đánh giá là sai.

Ví dụ:

public class ConditionalOperatorExample {
    public static void main(String[] args) {
        int number = 10;
        
        // Using the conditional operator to check if the number is positive or negative
        String result = (number >= 0) ? "Positive" : "Negative";
        System.out.println("The number is " + result);

        // Using the conditional operator to find the maximum of two numbers
        int a = 15;
        int b = 8;
        int max = (a > b) ? a : b;
        System.out.println("The maximum of " + a + " and " + b + " is: " + max);
        
        // Using the conditional operator to check if a number is even or odd
        int value = 7;
        String evenOdd = (value % 2 == 0) ? "even" : "odd";
        System.out.println("The number " + value + " is " + evenOdd);
    }
}

Output:

The number is Positive
The maximum of 15 and 8 is: 15
The number 7 is odd

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

Các biểu thức được viết thường bao gồm một số toán tử. Các quy tắc ưu tiên quyết định thứ tự mà mỗi toán tử được đánh giá trong bất kỳ biểu thức đã cho nào.

Bảng dưới mô tả thứ tự ưu tiên của toán tử:

Sắp xếpToán tử
1.Ngoặc tròn ()
2.Toán tử một ngôi như +, -,++,–, ~,!
3.Số học và bitwise như *,/,%,+,-,<<,>>
4.Toán tử quan hệ như >,<,>=,<=,==,!=
5.Toán tử điều kiện và Bitwise như &,^,|,&&,||
6.Các toán tử điều kiện và gán như ?:,=,*=,/=,+=,-=

Tính kết hợp của toán tử

Trong lý thuyết ngôn ngữ lập trình , tính kết hợp của một toán tử là một thuộc tính xác định cách các toán tử có cùng mức độ ưu tiên được nhóm lại khi không có dấu ngoặc đơn. Dưới đây là bảng mô tả tính kết hợp của toán tử

Toán tửMô tảTính kết hợp
(),++,–Dấu ngoặc đơn, tăng sau, giảm sauTrái sang phải
++,–,+,-,!,~Tăng/giảm trước cộng | trừ một ngôi, logic NOT, bitwise NOT trừ một ngôi, logic NOT và bitwise NOTTrừ một ngôi logical NOT, bitwise NOT
Phải sang trái*,/,%,+,-Phép nhân, cộng
Trái sang phải<<,>>Dịch chuyển theo bit
Trái sang phải<,>,>=,<=,==,!=Toán tử quan hệ và đẳng thức
Trái sang phải&,^,|Bitwise AND,OR,NOT
Trái sang phải&&, ||Điều kiện AND,OR
Trái sang phải?:Toán tử 3 ngôi

Ép kiểu dữ liệu

Trong bất kỳ ứng dụng nào, có thể có những tình huống trong đó một loại dữ liệu có thể yêu cầu được chuyển đổi thành loại dữ liệu khác. Tính năng ép kiểu trong Java giúp chuyển đổi như vậy.

Chuyển đổi kiểu hoặc ép kiểu đề cập đến việc thay đổi một thực thể của kiểu dữ liệu này sang kiểu dữ liệu khác. Chẳng hạn, các giá trị từ một tập hợp giới hạn hơn, chẳng hạn như số nguyên, có thể được lưu trữ ở định dạng nhỏ gọn hơn. Nó có thể được chuyển đổi sau này sang một định dạng khác cho phép thực hiện các thao tác trước đây không thể thực hiện được, chẳng hạn như phép chia với độ chính xác đến vài chữ số thập phân. Trong các ngôn ngữ OOP, chuyển đổi kiểu cho phép các chương trình coi các đối tượng thuộc một loại là một trong các kiểu tổ tiên của chúng để đơn giản hóa việc tương tác với chúng.

Có hai loại chuyển đổi: ngầm định và tường minh. Thuật ngữ để chuyển đổi kiểu ngầm định là ép buộc(coercion). Hình thức chuyển đổi kiểu tường minh phổ biến nhất được gọi là casting. Chuyển đổi kiểu tường minh cũng có thể đạt được với các quy trình chuyển đổi được xác định riêng biệt, chẳng hạn như một hàm khởi tạo tạo đối tượng nạp chồng (overloaded object constructor).

Ép kiểu ngầm định

Khi dữ liệu thuộc một kiểu cụ thể được gán cho một biến thuộc kiểu khác, thì quá trình chuyển đổi loại tự động sẽ diễn ra. Nó còn được gọi là ép kiểu ngầm định, miễn là nó đáp ứng các điều kiện được chỉ định:

  • Hai kiểu dữ liệu phải tương thích
  • Kiểu dữ liệu đích phải có kích thước vùng nhớ lớn hơn nguồn

Các kiểu dữ liệu số nguyên thủy có thể được ép kiểu ngầm định như sau:

  • byte (8 bit) thành short, int, long, float, double.
  • short (16 bit) thành int, long, float, double.
  • int (32 bit) thành long, float, double.
  • long(64 bits) thành float, double.

Điều này còn được gọi là quy tắc thăng cấp kiểu (type promotion rule). Thăng cấp kiểu được liệt kê như sau:

  • Tất cả giá trị byte và short được thăng cấp thành kiểu int.
  • Nếu một toán hạng long, toàn bộ biểu thức được thăng cấp thành long.
  • Nếu một toán hạng là Float thì toàn bộ biểu thức được thăng cấp thành Float.
  • Nếu một toán hạng là double thì toàn bộ biểu thức được thăng cấp thành double.

Ép kiểu tường minh

Loại dữ liệu có độ chính xác thấp hơn, chẳng hạn như ngắn, có thể được chuyển đổi thành loại có độ chính xác cao hơn, chẳng hạn như int, mà không cần sử dụng phép truyền rõ ràng. Tuy nhiên, để chuyển đổi loại dữ liệu có độ chính xác cao hơn thành độ chính xác thấp hơn
kiểu dữ liệu, chẳng hạn như kiểu dữ liệu float sang int, thì bắt buộc phải truyền rõ ràng. Nếu không, trình biên dịch sẽ hiển thị thông báo lỗi.

Cú pháp:

(data_type) value;

Ví dụ:

float a=21.347687;
int b = (int) a+5;

Giá trị float trong a được chuyển đổi thành giá trị số nguyên 21. Sau đó, nó được thêm vào 5 và giá trị kết quả, 26, được lưu trữ trong b. Loại chuyển đổi này được gọi là cắt ngắn (truncation). Thành phần phân số bị mất khi 2 dấu chấm động được gán cho kiểu số nguyên, dẫn đến mất độ chính xác.

Bài tập

  1. Cài đặt NetBean IDE và helloworld với Java
  2. Viết chương trình khai báo các kiểu dữ liệu cơ bản khác nhau,trong quá trình khai báo, khai báo thử một số biến không hợp lệ trong chương trình và quan sát lỗi trả ra của chương trình
  3. Mô tả các khái niệm: package, class, method, fields trong Java.
  4. Mô tả sự khác biệt giữa kiểu dữ liệu nguyên thủy và kiểu dữ liệu class Base trong java

Bài viết liên quan:

Các tính năng nâng cao mới trong Java
Logging API, Resource Bundles, Networking trong Java
Cấu trúc dữ liệu Java
Biểu thức lambda nâng cao
Design Pattern (Mẫu thiết kế) và các tính năng nâng cao khác
Các tính năng nâng cao của JDBC API
Java JDBC API
Đa luồng (multithreading) và đa nhiệm (Concurrency)
Thread (Luồng) trong Java
Stream (luồng) và xử lý File trong Java
Generic trong Java
Java Utility API, các Collections trong Java

THÊM BÌNH LUẬN Cancel reply

Dịch vụ thiết kế Wesbite

NỘI DUNG MỚI CẬP NHẬT

4. KIỂM THỬ VÀ TRIỂN KHAI HỆ THỐNG

2. PHÂN TÍCH VÀ ĐẶC TẢ HỆ THỐNG

3. THIẾT KẾ HỆ THỐNG

1. TỔNG QUAN KIẾN THỨC THỰC HÀNH TRIỂN KHAI DỰ ÁN CÔNG NGHỆ THÔNG TIN

Hướng dẫn tự cài đặt n8n comunity trên CyberPanel, trỏ tên miền

Giới thiệu

hocvietcode.com là website chia sẻ và cập nhật tin tức công nghệ, chia sẻ kiến thức, kỹ năng. Chúng tôi rất cảm ơn và mong muốn nhận được nhiều phản hồi để có thể phục vụ quý bạn đọc tốt hơn !

Liên hệ quảng cáo: [email protected]

Kết nối với HỌC VIẾT CODE

© hocvietcode.com - Tech888 Co .Ltd since 2019

Đăng nhập

Trở thành một phần của cộng đồng của chúng tôi!
Registration complete. Please check your email.
Đăng nhập bằng google
Đăng kýBạn quên mật khẩu?

Create an account

Welcome! Register for an account
The user name or email address is not correct.
Registration confirmation will be emailed to you.
Log in Lost your password?

Reset password

Recover your password
Password reset email has been sent.
The email could not be sent. Possible reason: your host may have disabled the mail function.
A password will be e-mailed to you.
Log in Register
×