Giới thiệu về Nguyên thủy Java

1. Khái quát chung

Ngôn ngữ lập trình Java có tám kiểu dữ liệu nguyên thủy.

Trong bài viết này, chúng ta sẽ nhớ lại nguyên thủy là gì và xem qua chúng.

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

Tám nguyên thủy được định nghĩa trong Java là int , byte , short , long , float , double , booleanchar - chúng không được coi là đối tượng và đại diện cho các giá trị thô.

Chúng được lưu trữ trực tiếp trên ngăn xếp (xem bài viết này để biết thêm thông tin về quản lý bộ nhớ trong Java).

Hãy xem kích thước lưu trữ, giá trị mặc định và ví dụ về cách sử dụng từng loại.

Hãy bắt đầu với tham khảo nhanh:

Kiểu Kích thước (bit) Tối thiểu Tối đa Thí dụ
byte số 8 -27 27– 1 byte b = 100;
ngắn 16 -215 215– 1 ngắn s = 30_000;
int 32 -231 231– 1 int i = 100_000_000;
Dài 64 -263 263– 1 dài l = 100_000_000_000_000;
Phao nổi 32 -2-149 (2-2-23) · 2127 float f = 1.456f;
gấp đôi 64 -2-1074 (2-2-52) · 21023 gấp đôi f = 1,456789012345678;
char 16 0 216– 1 char c = 'c';
boolean 1 - - boolean b = true;

2.1. int

Kiểu dữ liệu nguyên thủy đầu tiên mà chúng ta sẽ đề cập là int . Còn được gọi là số nguyên, kiểu int chứa nhiều giá trị số không phải là số phân số.

Cụ thể, Java lưu trữ nó bằng cách sử dụng 32 bit bộ nhớ . Nói cách khác, nó có thể đại diện cho các giá trị từ -2,147,483,648 (-231) đến 2,147,483,647 (231-1).

Trong Java 8, có thể lưu trữ giá trị số nguyên không dấu lên đến 4,294,967,295 (232-1) bằng cách sử dụng các hàm trợ giúp đặc biệt mới.

Chúng ta chỉ có thể khai báo một int đơn giản:

int x = 424_242; int y;

Giá trị mặc định của một int được khai báo mà không có gán là 0.

Nếu biến được định nghĩa trong một phương thức, chúng ta phải gán một giá trị trước khi có thể sử dụng nó.

Chúng ta có thể thực hiện tất cả các phép toán số học tiêu chuẩn trên int s. Chỉ cần lưu ý rằng các giá trị thập phân sẽ bị cắt nhỏ khi thực hiện các giá trị này trên số nguyên.

2.2. byte

byte là một kiểu dữ liệu nguyên thủy tương tự như int , ngoại trừ nó chỉ chiếm 8 bit bộ nhớ . Vì vậy, tại sao chúng ta gọi nó là byte. Bởi vì kích thước bộ nhớ rất nhỏ, byte chỉ có thể giữ các giá trị từ -128 (-27) đến 127 (27 - 1).

Chúng ta có thể tạo byte :

byte b = 100; byte empty;

Giá trị mặc định của byte cũng là 0.

2.3. ngắn

Điểm dừng tiếp theo trong danh sách các kiểu dữ liệu nguyên thủy trong Java của chúng tôi là ngắn .

Nếu chúng ta muốn tiết kiệm bộ nhớ và byte quá nhỏ, chúng ta có thể sử dụng kiểu nửa chừng giữa hai: short .

Với 16 bit bộ nhớ, nó có kích thước bằng một nửa int và gấp đôi kích thước byte . Phạm vi các giá trị có thể có của nó là -32,768 (-215) đến 32,767 (215 - 1).

short được khai báo như thế này:

short s = 202_020; short s;

Cũng tương tự như các kiểu khác, giá trị mặc định là 0. Chúng ta cũng có thể sử dụng tất cả các số học tiêu chuẩn trên đó.

2.4. Dài

Kiểu dữ liệu nguyên thủy cuối cùng của chúng tôi liên quan đến số nguyên là dài .

long là anh trai lớn của int . Nó được lưu trữ trong bộ nhớ 64 bit để có thể chứa một tập hợp các giá trị có thể lớn hơn đáng kể.

Các giá trị có thể có của một long nằm trong khoảng -9,223,372,036,854,775,808 (-263) đến 9,223,372,036,854,775,807 (263 - 1).

Chúng ta chỉ cần khai báo một:

long l = 1_234_567_890; long l;

Như với các kiểu số nguyên khác, mặc định cũng là 0. Chúng ta có thể sử dụng tất cả các số học trên long hoạt động trên int .

2.5. Phao nổi

Chúng tôi biểu diễn các số phân số cơ bản trong Java bằng kiểu float . Đây là một số thập phân có độ chính xác đơn. Có nghĩa là nếu chúng ta vượt quá sáu dấu thập phân, con số này trở nên kém chính xác hơn và mang tính ước tính nhiều hơn.

Trong hầu hết các trường hợp, chúng tôi không quan tâm đến việc mất độ chính xác. Nhưng, nếu tính toán của chúng ta đòi hỏi độ chính xác tuyệt đối (ví dụ: hoạt động tài chính, hạ cánh trên mặt trăng, v.v.), chúng ta cần sử dụng các loại cụ thể được thiết kế cho công việc này. Để biết thêm thông tin, hãy kiểm tra Big Decimal của lớp Java.

This type is stored in 32 bits of memory just like int. However, because of the floating decimal point its range is much different. It can represent both positive and negative numbers. The smallest decimal is 1.40239846 x 10-45, and the largest value is 3.40282347 x 1038.

We declare floats the same as any other type:

float f = 3.145f; float f;

And the default value is 0.0 instead of 0. Also, notice we add the f designation to the end of the literal number to define a float. Otherwise, Java will throw an error because the default type of a decimal value is double.

We can also perform all standard arithmetic operations on floats. However, it's important to note that we perform floating point arithmetic very differently than integer arithmetic.

2.6. double

Next, we look at double – its name comes from the fact that it's a double-precision decimal number.

It's stored in 64 bits of memory. Which means it represents a much larger range of possible numbers than float.

Although, it does suffer from the same precision limitation as float does. The range is 4.9406564584124654 x 10-324 to 1.7976931348623157 x 10308. That range can also be positive or negative.

Declaring double is the same as other numeric types:

double d = 3.13457599923384753929348D; double d;

The default value is also 0.0 as it is with float.Similar to float, we attach the letter D to designate the literal as a double.

2.7. boolean

The simplest primitive data type is boolean. It can contain only two values: true or false. It stores its value in a single bit.

However, for convenience, Java pads the value and stores it in a single byte.

Declare boolean like this:

boolean b = true; boolean b;

Declaring it without a value defaults to false. boolean is the cornerstone of controlling our programs flow. We can use boolean operators on them (i.e., and, or, etc.).

2.8. char

The final primitive data type to look at is char.

Also called a character, char is a 16-bit integer representing a Unicode-encoded character. Its range is from 0 to 65,535. Which in Unicode represents ‘\u0000' to ‘\uffff'.

For a list of all possible Unicode values check out sites like Unicode Table.

Let's now declare a char:

char c = 'a'; char c = 65; char c;

When defining our variables, we can use any character literal, and they will get automatically transformed into their Unicode encoding for us. A characters default value is ‘/u0000'.

2.9. Overflow

The primitive data types have size limits. But what happens if we try to store a value that's larger than the maximum value?

We run into a situation called overflow.

When an integer overflows, it rolls over to the minimum value and begins counting up from there.

Floating point number overflow by returning Infinity. When they underflow, they return 0.0.

Here's an example:

int i = Integer.MAX_VALUE; int j = i + 1; // j will roll over to -2_147_483_648 double d = Double.MAX_VALUE; double o = d + 1; // o will be Infinity

Underflow is the same issue except if we store a value smaller than the minimum value.

2.10. Autoboxing

Each primitive data type also has a full Java class implementation that can wrap it. For instance, the Integer class can wrap an int. There is sometimes a need to convert from the primitive type to its object wrapper (e.g., using them with generics).

May mắn thay, Java có thể tự động thực hiện chuyển đổi này cho chúng tôi. Chúng tôi gọi quá trình này là Autoboxing . Đây là một ví dụ:

Character c = 'c'; Integer i = 1;

3. Kết luận

Trong hướng dẫn này, chúng tôi đã đề cập đến tám kiểu dữ liệu nguyên thủy được hỗ trợ trong Java.

Đây là những khối xây dựng được sử dụng bởi hầu hết, không phải tất cả các chương trình Java hiện có - vì vậy rất đáng để hiểu cách chúng hoạt động.