Trong Java, tất cả các biến phải được khai báo trước khi sử dụng. Khi khai báo biến, cần chỉ rõ loại dữ liệu có thể được lưu trữ trong biến thông qua kiểu dữ liệu của biến. Trong Java, các kiểu dữ liệu được chia thành 2 loại:
- Kiểu dữ liệu primitive (kiểu dữ liệu nguyên thủy hay kiểu dữ liệu cơ bản) được định nghĩa sẵn trong Java. Gồm 8 kiểu dữ liệu là boolean, byte, short, int, long, double, float, char.
- Kiểu dữ liệu non-primitive thường là các lớp (class) do lập trình viên tự định nghĩa (ngoại trừ String, Arrays,..).
Bài này sẽ giới thiệu 8 kiểu dữ liệu primitive và kiểu dữ liệu String trong Java.
1. Kiểu dữ liệu boolean
Đây là kiểu dữ liệu chỉ nhận một trong 2 giá trị true hoặc false.
Giá trị mặc định là false.
class Main {
public static void main(String[] args) {
boolean flag = true;
System.out.println(flag);//true
}
}
2. Kiểu dữ liệu byte
Kiểu dữ liệu byte có giá trị từ -128 đến 127, được biểu diễn bởi 8 bit.
Giá trị mặc định là 0.
Nếu chắc chắn rằng giá trị của một biến sẽ nằm trong khoảng -128 đến 127 thì nên sử dụng kiểu byte thay kiểu int để tiết kiệm bộ nhớ.
class Main {
public static void main(String[] args) {
byte range;
range = 124;
System.out.println(range);//124
}
}
3. Kiểu dữ liệu short
Kiểu dữ liệu short có giá trị từ -32768 đến 32767, được biểu diễn bởi 16 bit.
Giá trị mặc định là 0.
Nếu chắc chắn rằng giá trị của một biến sẽ nằm trong khoảng -32768 đến 32767 thì nên sử dụng kiểu short thay kiểu int hoặc long để tiết kiệm bộ nhớ.
class Main {
public static void main(String[] args) {
short temperature;
temperature = -200;
System.out.println(temperature);//-200
}
}
4. Kiểu dữ liệu int
Kiểu dữ liệu int có giá trị từ -231 to 231-1, được biểu diễn bởi 32 bit.
Giá trị mặc định là 0.
class Main {
public static void main(String[] args) {
int range = -4250000;
System.out.println(range);//-4250000
}
}
5. Kiểu dữ liệu long
Kiểu dữ liệu long có giá trị từ -263 to 263-1, được biểu diễn bởi 64 bit.
Giá trị mặc định là 0.
class Main {
public static void main(String[] args) {
long range = -42332200000L;
System.out.println(range);//-42332200000
}
}
Lưu ý: Sử dụng L ở cuối -42332200000 để thể hiện đây là kiểu long.
6. Kiểu dữ liệu double
Kiểu dữ liệu double lưu trữ số thực với dấu chấm động (floating-point), được biểu diễn bởi 64 bit.
Giá trị mặc định là 0.0 (0.0d).
class Main {
public static void main(String[] args) {
double number = -42.3d;
System.out.println(number);//-42.3
}
}
7. Kiểu dữ liệu float
Kiểu dữ liệu float lưu trữ số thực với dấu chấm động (floating-point), được biểu diễn bởi 32 bit.
Giá trị mặc định là 0.0 (0.0f).
class Main {
public static void main(String[] args) {
float number = -42.3f;
System.out.println(number);//-42.3
}
}
Lưu ý: Nếu biểu diễn số thực có kiểu dữ liệu là float thì phải sử dụng f phía sau số thực. Còn số thực có kiểu dữ liệu là double thì sử dụng d phía sau số thực hoặc không cần sử dụng d. Ví dụ, -42.3f là số thực kiểu float, -42.3 hoặc -42.3d là số thực kiểu double.
8. Kiểu dữ liệu char
Kiểu dữ liệu char dùng để lưu trữ các ký tự Unicode, được biểu diễn bởi 16 bit.
Giá trị mặc định là ‘\u0000’.
Giá trị ký tự nhỏ nhất của kiểu char là ‘\u0000’ (0) và giá trị ký tự lớn nhất là ‘\uffff’.
class Main {
public static void main(String[] args) {
char letter = '\u0051';
System.out.println(letter);//ký tự Q
char letter1 = '9';
System.out.println(letter1);//9
char letter2 = 65;
System.out.println(letter2);//A
}
}
Nếu một số nguyên được gán cho biến char (ví dụ char letter2 = 65;), Java sẽ lấy ký tự tương ứng số nguyên đó trong bảng mã ASCII. Ví dụ, trong bảng mã ASCII thì 65 tương ứng ký tự ‘A’.
9. Kiểu dữ liệu String
Java hỗ trợ kiểu dữ liệu String, lưu trữ chuỗi ký tự thông qua lớp java.lang.String
. Đây không phải là kiểu dữ liệu cơ bản mà nó là một lớp được định nghĩa sẵn trong Java.
class Main {
public static void main(String[] args) {
String myString = "Java Programming";
System.out.println(myString);//Java Programming
}
}
Trong ví dụ trên, myString là một đối tượng của lớp String.
Ghép chuỗi với String
String message = "Welcome " + "to " + "Java!";//Welcome to Java!
String s = "Chuong " + 2;//Chuong 2
String s1 = "Hello" + " World!";//Hello World!
String s2 = s + " - " + s1;//Chuong 2 - Hello World!
Chuyển đổi chuỗi ký tự thành số
int intValue = Integer.parseInt("123");//123
double doubleValue = Double.parseDouble("123.45");//123.45
10. Một số lỗi về kiểu dữ liệu phổ biến
Tràn số nguyên
int value = 2147483647 + 1; // giá trị thực sự của value là 2147483648
Làm tròn số
System.out.println(1.0 - 0.1 - 0.1 - 0.1 - 0.1 - 0.1);//kết quả là 0.5000000000000001, không phải 0.5
System.out.println(1.0 - 0.9);//kết quả là 0.09999999999999998, không phải 0.1
Chia số nguyên ngoài ý muốn
int number1 = 1;
int number2 = 2;
double average2 = (number1 + number2)/2;
System.out.println(average2);//1.0
double average20 = (number1 + number2)/2.0;
System.out.println(average20);//1.5
Câu lệnh double average2 = (number1 + number2)/2;
sẽ cho giá trị 1.0 bởi (number1 + number2) sẽ ra số nguyên, số nguyên này lại chia cho số nguyên 2 nên kết quả sẽ là số nguyên 1. Số nguyên 1 được ép kiểu qua double nên giá trị là 1.0.
Câu lệnh double average20 = (number1 + number2)/2.0;
sẽ cho giá trị 1.5 bởi (number1 + number2) sẽ ra số nguyên, số nguyên này chia cho số thực 2.0 nên kết quả sẽ tự ép kiểu ra là số thực 1.5.
Các bạn có thể đọc thêm kiến thức về ép kiểu trong Java ở bài Java Type Casting.