W3School
Kiểu dữ liệu trong JAVA
Như đã giải thích trong bài trước, một biến trong Java phải là một kiểu dữ liệu được chỉ định:
int myNum = 5; // Integer (whole number)
float myFloatNum = 5.99f; // Floating point number
char myLetter = 'D'; // Character
boolean myBool = true; // Boolean
String myText = "Hello"; // String
Các kiểu dữ liệu được chia thành hai nhóm:
- Các kiểu dữ liệu nguyên thuỷ (Primitive) – bao gồm
byte
,short
,int
,long
,float
,double
,boolean
vàchar
- Các kiểu dữ liệu không nguyên thủy (Non-primitive) – chẳng hạn như Sring, Arrays và Classes( bạn sẽ tìm hiểu thêm về những kiểu này trong các bài sau)
Kiểu dữ liệu nguyên thuỷ (Primitive)
Kiểu dữ liệu nguyên thủy chỉ định kích thước và kiểu của các giá trị biến và nó không có phương thức bổ sung.
Có tám kiểu dữ liệu nguyên thủy trong Java:
Data Type | Size | Description |
---|---|---|
byte | 1 byte | Lưu trữ các số nguyên từ -128 đến 127 |
short | 2 bytes | Lưu trữ các số nguyên từ -32,768 đến 32,767 |
int | 4 bytes | Lưu trữ các số nguyên từ -2,147,483,648 đến 2,147,483,647 |
long | 8 bytes | Lưu trữ các số nguyên từ -9,223,372,036,854,775,808 đến 9,223,372,036,854,775,807 |
float | 4 bytes | Lưu trữ số dạng phân số. Đủ để lưu trữ từ 6 đến 7 chữ số thập phân. VD: 6.7 |
double | 8 bytes | Lưu trữ số phân số. Đủ để lưu trữ 15 chữ số thập phân |
boolean | 1 bit | Lưu trữ các giá trị đúng hoặc sai |
char | 2 bytes | Lưu trữ một ký tự / chữ cái hoặc các giá trị ASCII |
Kiểu số trong Java
Các kiểu số nguyên thủy (Primitive number types) được chia thành hai nhóm:
Loại số nguyên (Integer types) lưu trữ các số nguyên, dương hoặc âm (chẳng hạn như 123 hoặc -456), không có phần thập phân. Các loại hợp lệ là byte
, short
, int
và long
. Bạn nên sử dụng kiểu phù hợp với giá trị số của bạn.
Các kiểu dấu phẩy động (Floating point types) biểu thị các số có phần thập phân, chứa một hoặc nhiều số thập phân. Có hai loại: float
và double
.
Mặc dù có nhiều kiểu số trong Java, nhưng kiểu số được sử dụng nhiều nhất là int
(cho số nguyên) và double
(cho số dấu phẩy động). Tuy nhiên, chúng tôi sẽ mô tả tất cả trong bài giảng.
Các loại số nguyên (Integer types)
Byte
Kiểu byte
dữ liệu có thể lưu trữ các số nguyên từ -128 đến 127. Kiểu này có thể được sử dụng thay vì int
hoặc các kiểu số nguyên khác để tiết kiệm bộ nhớ khi bạn chắc chắn rằng giá trị sẽ nằm trong -128 và 127:
byte myNum = 100;
System.out.println(myNum);
Short
Kiểu short
dữ liệu có thể lưu trữ các số nguyên từ -32768 đến 32767:
short myNum = 5000;
System.out.println(myNum);
Int
Kiểu int
dữ liệu có thể lưu trữ các số nguyên từ -2147483648 đến 2147483647. Nói chung và trong hướng dẫn của chúng tôi, kiểu dữ liệu int
là kiểu dữ liệu được ưu tiên khi chúng ta tạo các biến có giá trị số.
int myNum = 100000;
System.out.println(myNum);
Long
Kiểu long
dữ liệu có thể lưu trữ các số nguyên từ -9223372036854775808 đến 9223372036854775807. Kiểu này được sử dụng khi int không đủ lớn để lưu giá trị. Lưu ý rằng bạn nên kết thúc giá trị bằng “L”:
long myNum = 15000000000L;
System.out.println(myNum);
Các loại dấu chấm động (Floating point types)
Bạn nên sử dụng kiểu dấu phẩy động bất cứ khi nào bạn cần một số có phần thập phân, chẳng hạn như 9,99 hoặc 3,14515.
Kiểu dữ liệu float
và double
có thể lưu trữ số phân số. Lưu ý rằng bạn nên kết thúc giá trị bằng “f” cho float và “d” cho double:
float myNum = 5.75f;
System.out.println(myNum);
double myNum = 19.99d;
System.out.println(myNum);
Sử dụng float
hay double
?
Độ chính xác của giá trị dấu phẩy động cho biết giá trị có thể có bao nhiêu chữ số sau dấu thập phân. Độ chính xác của float
chỉ là sáu hoặc bảy chữ số thập phân, trong khi các biến double
có độ chính xác khoảng 15 chữ số. Do đó sẽ an toàn hơn khi sử dụng double
cho hầu hết các phép tính.
Scientific Numbers
Một số dấu phẩy động cũng có thể là một số khoa học với chữ “e” để biểu thị lũy thừa của 10:
float f1 = 35e3f; // 35000.0
double d1 = 12E4d; // 120000.0
System.out.println(f1);
System.out.println(d1);
Boolean Types
Kiểu dữ liệu boolean được khai báo với từ khóa boolean và chỉ có thể nhận các giá trị true hoặc false (Đúng hoặc sai):
boolean isJavaFun = true;
boolean isFishTasty = false;
System.out.println(isJavaFun); // Outputs true
System.out.println(isFishTasty); // Outputs false
Giá trị boolean chủ yếu được sử dụng để kiểm tra có điều kiện, bạn sẽ tìm hiểu thêm về điều này trong bài sau.
Characters
Kiểu dữ liệu char được sử dụng để lưu trữ một ký tự. Ký tự phải được bao quanh bởi các dấu ngoặc đơn, như ‘A’ hoặc ‘c’:
char myGrade = 'B';
System.out.println(myGrade);
Ngoài ra, nếu bạn đã quen với các giá trị ASCII, bạn có thể sử dụng các giá trị đó để hiển thị các ký tự nhất định:
char myVar1 = 65, myVar2 = 66, myVar3 = 67;
System.out.println(myVar1); // A
System.out.println(myVar2); // B
System.out.println(myVar3); // C
Mẹo: Bạn có thể tìm thấy danh sách tất cả các giá trị ASCII trong Tham chiếu Bảng ASCII của chúng tôi.
Strings
Kiểu dữ liệu String
được sử dụng để lưu trữ một chuỗi ký tự (văn bản). Giá trị chuỗi phải được bao quanh bởi dấu ngoặc kép:
String greeting = "Hello World";
System.out.println(greeting);
Kiểu String
được sử dụng và tích hợp rất nhiều trong Java, đến nỗi một số người gọi nó là “kiểu thứ chín đặc biệt”. String
trong Java thực sự là một kiểu dữ liệu không nguyên thủy, vì nó tham chiếu đến một đối tượng. Đối tượng String có các phương thức được sử dụng để thực hiện các hoạt động nhất định trên chuỗi. Đừng lo lắng nếu bạn chưa hiểu thuật ngữ “đối tượng”. Chúng ta sẽ tìm hiểu thêm về chuỗi và đối tượng trong các bài sau.
Các kiểu dữ liệu không nguyên thủy của Java
Các kiểu dữ liệu không nguyên thủy được gọi là kiểu tham chiếu vì chúng tham chiếu đến các đối tượng.
Sự khác biệt chính giữa kiểu dữ liệu nguyên thủy và không nguyên thủy là:
- Các kiểu nguyên thủy được xác định trước (đã được định nghĩa) trong Java. Các kiểu không nguyên thủy được tạo bởi lập trình viên và không được định nghĩa bởi Java (ngoại trừ
String
). - Các kiểu không nguyên thủy có thể được sử dụng để gọi các phương thức để thực hiện một số hoạt động nhất định, trong khi các kiểu nguyên thủy thì không thể.
- Một kiểu nguyên thủy luôn có một giá trị, trong khi các kiểu không nguyên thủy có thể có
null
. - Kiểu nguyên thủy bắt đầu bằng chữ thường, trong khi kiểu không nguyên thủy bắt đầu bằng chữ hoa.
- Kích thước của kiểu nguyên thủy phụ thuộc vào kiểu dữ liệu, trong khi các kiểu không nguyên thủy có cùng kích thước.
Ép kiểu trong Java
Ép kiểu là khi bạn gán giá trị của một kiểu dữ liệu nguyên thủy cho một kiểu khác.
Trong Java, có hai kiểu ép kiểu:
- Widening Casting (tự động) – chuyển đổi loại nhỏ hơn thành kích thước loại lớn hơn
byte
->short
->char
->int
->long
->float
->double
- Narrowing Casting (thủ công) – chuyển đổi loại lớn hơn sang loại kích thước nhỏ hơn
double
->float
->long
->int
->char
->short
->byte
Widening Casting
Widening Casting được thực hiện tự động khi chuyển loại kích thước nhỏ hơn sang loại kích thước lớn hơn:
public class Main {
public static void main(String[] args) {
int myInt = 9;
double myDouble = myInt; // Automatic casting: int to double
System.out.println(myInt); // Outputs 9
System.out.println(myDouble); // Outputs 9.0
}
}
Narrowing Casting
Narrowing Casting phải được thực hiện theo cách thủ công bằng cách đặt loại trong dấu ngoặc đơn ở phía trước giá trị:
public class Main {
public static void main(String[] args) {
double myDouble = 9.78d;
int myInt = (int) myDouble; // Manual casting: double to int
System.out.println(myDouble); // Outputs 9.78
System.out.println(myInt); // Outputs 9
}
}
W3School