- 1 1. Kiểu Dữ Liệu Java Là Gì? Các Nguyên Tắc Cơ Bản Và Tổng Quan
- 2 2. Kiểu Nguyên Thủy (Kiểu Dữ Liệu Cơ Bản): Danh Sách Và Cách Sử Dụng Chúng
- 3 3. Kiểu Tham chiếu: Những Điều Cơ Bản
- 4 4. Lớp Wrapper và Autoboxing
- 5 5. Chuyển đổi Kiểu (Casting): Cơ bản
- 6 6. Hướng Dẫn Chọn Loại Thực Tế (Để Bạn Không Do Dự Tại Nơi Làm Việc)
- 6.1 6.1 Tại Sao int và double Thường Đủ
- 6.2 6.2 Tại Sao Bạn Nên Sử Dụng BigDecimal Cho Tiền Bạc
- 6.3 6.3 Các Bộ Sưu Tập Yêu Cầu Các Lớp Bao Bọc
- 6.4 6.4 Quyết Định Dựa Trên Việc Bạn Có Cần null Không
- 6.5 6.5 Hướng Dẫn Hiệu Suất Cơ Bản
- 6.6 6.6 Bảng Tóm Tắt: Các Loại Khuyến Nghị Theo Trường Hợp Sử Dụng
- 6.7 Các Lỗi Thực Tế Phổ Biến
- 7 7. Tổng Kết Kiểu Dữ Liệu Java (Kèm Bảng)
- 8 Câu Hỏi Thường Gặp
- 8.1 Q1. Có bao nhiêu kiểu dữ liệu Java?
- 8.2 Q2. String có phải là kiểu nguyên thủy không?
- 8.3 Q3. Sự khác biệt giữa int và Integer là gì?
- 8.4 Q4. Tôi có thể dùng double cho các phép tính tiền không?
- 8.5 Q5. Tại sao phép chia các số nguyên không cho ra kết quả thập phân?
- 8.6 Q6. null là gì?
- 8.7 Q7. Sự khác biệt giữa == và equals() là gì?
- 8.8 Q8. Những kiểu nào nên học đầu tiên cho người mới bắt đầu?
1. Kiểu Dữ Liệu Java Là Gì? Các Nguyên Tắc Cơ Bản Và Tổng Quan
Kiểu dữ liệu Java là một cơ chế xác định loại giá trị mà một biến có thể lưu trữ.
Java nhấn mạnh an toàn kiểu (một thiết kế ngăn chặn các hoạt động kiểu không hợp lệ tại thời điểm biên dịch), vì vậy mọi biến phải có kiểu được khai báo.
Ví dụ, hãy xem mã sau.
int number = 10;
double price = 19.8;
String name = "Java";
int→ chỉ số nguyêndouble→ chỉ số thập phânString→ chỉ chuỗi
Bằng cách làm cho các kiểu rõ ràng, bạn nhận được lợi ích như:
- Ngăn chặn các phép gán không hợp lệ
- Tối ưu hóa việc sử dụng bộ nhớ
- Phát hiện lỗi tại thời điểm biên dịch
Nếu không có kiểu, các lỗi như gán chuỗi cho số nguyên sẽ không được phát hiện cho đến thời điểm chạy. Java được thiết kế để ngăn chặn điều đó.
1.1 Kiểu Dữ Liệu Là Gì? (Định Nghĩa Thân Thiện Với Người Mới Bắt Đầu)
Hãy nghĩ về kiểu dữ liệu như “loại giá trị mà một biến được phép xử lý.”
Cú pháp cơ bản là:
TypeName variableName = value;
Ví dụ:
int age = 25;
Trong trường hợp này:
intlà kiểuagelà tên biến25là giá trị
Đó là mối quan hệ.
Nếu bạn viết như này, bạn sẽ nhận được lỗi:
int age = "25"; // Compile-time error
Bạn không thể gán chuỗi cho kiểu số nguyên. Đây là cách an toàn kiểu hoạt động.
Những Sai Lầm Phổ Biến Của Người Mới Bắt Đầu
- Giả định bạn có thể bỏ qua kiểu (trong Java, bạn thường không thể)
- Nhầm lẫn giữa số và chuỗi
- Nhầm lẫn
=(gán) và==(so sánh)
1.2 Phân Loại Kiểu Dữ Liệu Java (Hai Loại)
Kiểu dữ liệu Java được chia rộng rãi thành hai loại:
- Kiểu nguyên thủy
- Kiểu tham chiếu
Kiểu nguyên thủy là gì?
Các kiểu lưu trữ giá trị thực tế trực tiếp.
Ví dụ: int, double, boolean, v.v.
Đặc điểm:
- Tiết kiệm bộ nhớ
- Nhanh
- Không thể chứa
null
Kiểu tham chiếu là gì?
Các kiểu lưu trữ không phải giá trị chính nó, mà là “tham chiếu” đến nơi giá trị được lưu trữ.
Ví dụ:
String text = "Hello";
String là kiểu lớp (một kiểu tham chiếu).
Đặc điểm:
- Được tạo dựa trên lớp
- Có thể được gán
null - Có phương thức (hành vi)
1.3 Sự Khác Biệt Trong Hành Vi “Giá Trị vs Tham Chiếu”
Hãy xác nhận sự khác biệt với một ví dụ đơn giản.
int a = 10;
int b = a;
b = 20;
Trong trường hợp này:
avẫn là 10- Chỉ
btrở thành 20
Mặt khác, kiểu tham chiếu hoạt động như thế này:
String s1 = "Java";
String s2 = s1;
Ở đây, s1 và s2 có thể tham chiếu đến cùng một đối tượng (điều này có thể thay đổi tùy thuộc vào triển khai và tối ưu hóa).
Những Điểm Khó Phổ Biến
- Hiểu lầm
Stringlà kiểu nguyên thủy - Giả định sao chép kiểu tham chiếu sao chép giá trị chính nó
- Không hiểu cách
nullhoạt động
1.4 Tại Sao Việc Hiểu Kiểu Dữ Liệu Quan Trọng
Việc hiểu kém về kiểu dữ liệu có thể gây ra vấn đề như:
- Kết quả tính toán bất ngờ
- Tràn số (vượt quá phạm vi giá trị)
NullPointerException- Lỗi chuyển đổi kiểu
Để sử dụng Java đúng cách, bạn phải hiểu tổng quan về kiểu dữ liệu trước.
2. Kiểu Nguyên Thủy (Kiểu Dữ Liệu Cơ Bản): Danh Sách Và Cách Sử Dụng Chúng
Kiểu nguyên thủy là kiểu dữ liệu lưu trữ giá trị thực tế trực tiếp.
Java có 8 kiểu nguyên thủy.
| Category | Type | Size | Typical Use |
|---|---|---|---|
| Integer | byte | 8bit | Small integers |
| Integer | short | 16bit | Smaller integers |
| Integer | int | 32bit | Standard integers |
| Integer | long | 64bit | Large integers |
| Decimal | float | 32bit | Single-precision floating point |
| Decimal | double | 64bit | Double-precision floating point (standard) |
| Character | char | 16bit | A single character |
| Boolean | boolean | – | true / false |
*Kích thước được cố định bởi thông số kỹ thuật Java (không phụ thuộc vào môi trường).
2.1 Kiểu Số Nguyên (byte / short / int / long)
Sử dụng cơ bản
int number = 100;
long population = 8000000000L;
Phạm vi (các ví dụ phổ biến)
- byte: -128 đến 127
- short: -32,768 đến 32,767
- int: khoảng ±2.1 tỷ
- long: khoảng ±9.22 x 10^18
Trong hầu hết các trường hợp, int là đủ.
Hiếm khi có nhu cầu thực tế sử dụng byte hoặc short chỉ để tiết kiệm bộ nhớ.
Lưu Ý Quan Trọng Khi Sử Dụng long
long value = 10000000000L; // L is required
Không có L, hằng số được coi là int và có thể gây lỗi biên dịch do vượt phạm vi.
Các lỗi thường gặp
- Tràn giá trị khi vượt quá phạm vi
- Quên thêm
Lcho hằnglong - Không nhận ra tràn trong các phép tính
int→int
2.2 Kiểu số thực (float / double)
double price = 19.99;
float rate = 0.5f;
Quy tắc cơ bản
- Thông thường, dùng double
floatcần hậu tốffloat value = 3.14f;
Sự khác biệt về độ chính xác
- float: khoảng 7 chữ số thập phân
- double: khoảng 15 chữ số thập phân
Lưu ý quan trọng (vấn đề làm tròn/độ chính xác)
System.out.println(0.1 + 0.2);
Kết quả có thể không chính xác là 0.3.
Điều này do đại diện số thực nhị phân.
Tính toán tiền tệ
Đối với việc xử lý tiền, double thường không được khuyến nghị.
Sử dụng BigDecimal an toàn hơn.
Các lỗi thường gặp
- Dùng
doublecho tiền tệ - Nhầm lẫn giữa
floatvàdouble - So sánh các số thập phân bằng
==
2.3 Kiểu ký tự (char)
char letter = 'A';
- Dùng dấu nháy đơn
- Quản lý bằng Unicode (tiêu chuẩn mã hoá ký tự)
- Chỉ có thể lưu một ký tự duy nhất
char kanji = '日';
Các lỗi thường gặp
- Dùng dấu nháy kép (đó là
String) - Cố gắng lưu nhiều ký tự
2.4 Kiểu Boolean (boolean)
boolean isActive = true;
- Giá trị chỉ có
truehoặcfalse - Không thể dùng 0/1 (khác với C)
boolean result = (5 > 3);
Các lỗi thường gặp
- Cố gắng gán một số
- Quên viết biểu thức so sánh
2.5 Ghi chú chung cho các Kiểu Nguyên thủy
- Không thể gán
null - Giá trị mặc định được tự động thiết lập cho các trường, nhưng biến cục bộ phải được khởi tạo
int x; System.out.println(x); // Compile-time error (uninitialized)
Các kiểu nguyên thủy nhanh và nhẹ, nhưng chúng có hạn chế như không hỗ trợ null và không có phương thức.
3. Kiểu Tham chiếu: Những Điều Cơ Bản
Kiểu tham chiếu lưu không phải giá trị thực tế, mà là một tham chiếu (địa chỉ bộ nhớ) tới một đối tượng.
Sự khác biệt lớn nhất so với các kiểu nguyên thủy là “dữ liệu thực tế” và “biến” tồn tại riêng biệt.
Xem ví dụ sau:
String text = "Java";
Ở đây, text lưu một tham chiếu tới đối tượng chuỗi, không phải giá trị chuỗi thực tế.
3.1 Kiểu String (Kiểu Tham chiếu Phổ biến Nhất)
String là một kiểu lớp. Nó không phải là kiểu nguyên thủy.
String name = "Taro";
Đặc điểm
- Bất biến (không thể thay đổi)
- Có thể gán
null - Có các phương thức
String str = "Hello"; System.out.println(str.length()); // 5
Cú pháp bất biến gây bất ngờ
String s = "Java";
s.concat(" SE");
System.out.println(s); // "Java"
concat() trả về một chuỗi mới, nhưng chuỗi gốc không bị thay đổi.
Cách sử dụng đúng:
s = s.concat(" SE");
Các lỗi thường gặp
- Giả định
Stringlà kiểu nguyên thủy - Dùng
==để so sánh chuỗi - Nối chuỗi quá nhiều gây vấn đề hiệu năng (nên dùng StringBuilder)
3.2 Mảng và Kiểu Lớp
Mảng
int[] numbers = {1, 2, 3};
Mảng cũng là kiểu tham chiếu.
int[] a = {1, 2};
int[] b = a;
b[0] = 99;
System.out.println(a[0]); // 99
Vì a và b tham chiếu cùng một mảng, nên các thay đổi ảnh hưởng đến cả hai.
Kiểu lớp
class Person {
String name;
}
Person p = new Person();
p.name = "Ken";
new là từ khóa dùng để tạo một đối tượng.
3.3 Null là gì?
null đại diện cho trạng thái “không có đối tượng nào được tham chiếu”.
String text = null;
Gọi một phương thức khi tham chiếu là null sẽ gây lỗi.
text.length(); // NullPointerException
Điều này được gọi là NullPointerException (NPE).
Cách xử lý null
if (text != null) {
System.out.println(text.length());
}
3.4 Sự khác biệt giữa == và equals()
== (so sánh tham chiếu)
So sánh xem địa chỉ bộ nhớ có giống nhau hay không.
.
equals() (so sánh nội dung)
So sánh xem nội dung có giống nhau hay không.
String a = new String("Java");
String b = new String("Java");
System.out.println(a == b); // false
System.out.println(a.equals(b)); // true
Sai lầm thường gặp
- Sử dụng
==để so sánh chuỗi - Gọi
equals()mà không kiểm tranull - Nhầm lẫn giữa sao chép tham chiếu và sao chép giá trị
3.5 Tóm tắt nhanh: Khác biệt so với các kiểu nguyên thủy
| Item | Primitive Types | Reference Types |
|---|---|---|
| Stores | The value itself | A reference |
| null | Not allowed | Allowed |
| Methods | No | Yes |
| new | Not needed | Usually needed |
Các kiểu tham chiếu linh hoạt, nhưng bạn phải cẩn thận với việc xử lý null và các tham chiếu chia sẻ.
4. Lớp Wrapper và Autoboxing
Các lớp wrapper là các lớp cho phép bạn xử lý các giá trị nguyên thủy như là đối tượng.
Trong Java, các collection (như List và Map) chỉ có thể lưu trữ các kiểu tham chiếu, vì vậy bạn không thể lưu trữ các kiểu nguyên thủy trực tiếp. Các lớp wrapper tồn tại để đáp ứng nhu cầu này.
4.1 Các lớp Wrapper thường dùng
| Primitive Type | Wrapper Class |
|---|---|
| byte | Byte |
| short | Short |
| int | Integer |
| long | Long |
| float | Float |
| double | Double |
| char | Character |
| boolean | Boolean |
Ví dụ:
Integer number = 10;
Double price = 19.99;
Vì các lớp wrapper là kiểu tham chiếu, chúng có thể chứa null.
Integer value = null; // OK
4.2 Autoboxing là gì?
Boxing có nghĩa là chuyển một kiểu nguyên thủy thành một lớp wrapper.
Kể từ Java 5, việc chuyển đổi này có thể diễn ra tự động.
Integer num = 10; // autoboxing
Nội bộ, điều này tương đương với:
Integer num = Integer.valueOf(10);
4.3 Unboxing là gì?
Unboxing chuyển một lớp wrapper trở lại thành kiểu nguyên thủy.
Integer num = 20;
int value = num; // auto-unboxing
Nội bộ:
int value = num.intValue();
4.4 Khi nào cần sử dụng các lớp Wrapper
1. Khi sử dụng collection
import java.util.ArrayList;
ArrayList<Integer> list = new ArrayList<>();
list.add(10); // autoboxing
Bạn không thể sử dụng ArrayList<int>.
2. Khi cần xử lý null
Integer score = null;
Các kiểu nguyên thủy không thể là null.

4.5 Ghi chú và Sai lầm thường gặp
1. Ngoại lệ khi unboxing null
Integer num = null;
int value = num; // NullPointerException
Một ngoại lệ xảy ra trong quá trình auto-unboxing.
2. So sánh bằng ==
Integer a = 1000;
Integer b = 1000;
System.out.println(a == b); // may be false
Vì đây là các đối tượng, == so sánh tham chiếu.
Hãy dùng equals() để so sánh nội dung.
a.equals(b);
3. Ảnh hưởng đến hiệu năng
Các lớp wrapper có thể tạo ra đối tượng,
do đó các phép tính nặng có thể chậm hơn so với việc sử dụng các kiểu nguyên thủy.
4.6 Lựa chọn giữa Kiểu Nguyên thủy và Lớp Wrapper
- Tính toán số học → kiểu nguyên thủy
- Lưu trữ trong collection → lớp wrapper
- Xử lý
null→ lớp wrapper
Nếu bạn nhớ các hướng dẫn này, bạn sẽ không ngần ngại trong công việc thực tế.
5. Chuyển đổi Kiểu (Casting): Cơ bản
Trong Java, khi bạn làm việc với các giá trị qua các kiểu dữ liệu khác nhau, bạn sử dụng chuyển đổi kiểu (casting).
Có hai loại chính:
- Chuyển đổi ngầm (widening conversion)
- Chuyển đổi tường minh (narrowing conversion)
5.1 Chuyển đổi Ngầm (Widening)
Việc chuyển đổi từ kiểu có phạm vi nhỏ hơn sang kiểu có phạm vi lớn hơn diễn ra tự động.
int num = 100;
long bigNum = num; // automatic conversion
Điều này an toàn vì nó mở rộng phạm vi số.
Thứ tự chuyển đổi (ví dụ liên quan đến số nguyên)
byte → short → int → long → float → double
Ví dụ
int a = 10;
double b = a; // OK
Lưu ý
- Độ chính xác được giữ trong nhiều trường hợp, nhưng có thể làm tròn khi dùng
floathoặcdouble. charcó thể được chuyển đổi thành giá trị số nguyên.char c = 'A'; int code = c; // 65
5.2 Chuyển đổi Tường minh (Narrowing)
Khi chuyển đổi từ kiểu lớn hơn sang kiểu nhỏ hơn, bạn phải ép kiểu một cách tường minh.
double price = 19.99;
int rounded = (int) price;
Kết quả là:
rounded = 19
Phần thập phân sẽ bị bỏ đi.
Cú pháp
(TargetType) variable
5.3 Ví dụ về Mất Dữ Liệu
int big = 1000;
byte small = (byte) big;
System.out.println(small);
Kết quả không phải là “không thể dự đoán,” mà là bị bọc để phù hợp với phạm vi mục tiêu.
Ở đây, 1000 vượt quá phạm vi byte, vì vậy giá trị thay đổi.
Những quan niệm sai lầm phổ biến
- Nghĩ rằng nó sẽ gây lỗi → trong thực tế, giá trị thay đổi
- Giả định rằng nó luôn an toàn → mất dữ liệu có thể xảy ra
5.4 Một Bẫy: Phép Chia Nguyên
int a = 5;
int b = 2;
double result = a / b;
System.out.println(result);
Kết quả là:
2.0
Phép chia nguyên được thực hiện như một phép toán nguyên.
Cách tiếp cận đúng:
double result = (double) a / b;
Kết quả:
2.5
5.5 Ghi Chú về So Sánh Số Thập Phân
double x = 0.1 + 0.2;
System.out.println(x == 0.3); // may be false
Điều này là do vấn đề độ chính xác điểm nổi.
Một so sánh an toàn hơn
Math.abs(x - 0.3) < 0.000001
5.6 Ép Kiểu Các Loại Tham Chiếu
Bạn cũng có thể ép kiểu các loại tham chiếu (khi có mối quan hệ kế thừa).
Object obj = "Java";
String str = (String) obj;
Ép kiểu sang loại không đúng gây ra ngoại lệ.
Integer num = (Integer) obj; // ClassCastException
Tóm Tắt Các Lỗi Phổ Biến
- Chuyển đổi ngoài phạm vi thay đổi giá trị
- Không nhận ra phép chia nguyên
- So sánh số thập phân với
== - Ép kiểu tham chiếu không hợp lệ
Ép kiểu thường không kích hoạt lỗi thời biên dịch, vì vậy sự hiểu lầm có thể dễ dàng dẫn đến lỗi.
6. Hướng Dẫn Chọn Loại Thực Tế (Để Bạn Không Do Dự Tại Nơi Làm Việc)
Bây giờ bạn hiểu cách các loại dữ liệu Java hoạt động, một câu hỏi thực tế phổ biến là: “Nên sử dụng loại nào?” Phần này tổ chức các tiêu chí quyết định thực tế.
6.1 Tại Sao int và double Thường Đủ
Sử dụng int cho số nguyên (mặc định)
int count = 100;
Lý do:
- Phạm vi 32-bit đủ cho hầu hết các trường hợp
- Dễ dàng hơn cho JVM tối ưu hóa
- Dễ đọc và chuẩn
Bạn thường không cần ép sử dụng byte hoặc short.
Chọn các loại nhỏ hơn chỉ để tiết kiệm bộ nhớ thường chỉ dành cho các trường hợp đặc biệt (như mảng lớn).
Sử dụng double cho số thập phân (mặc định)
double rate = 0.75;
Nó có độ chính xác cao hơn float và là lựa chọn chuẩn.
Trừ khi bạn có lý do rõ ràng, hãy chọn double.
6.2 Tại Sao Bạn Nên Sử Dụng BigDecimal Cho Tiền Bạc
Mã này rủi ro cho tiền bạc:
double price = 0.1 + 0.2;
Vì lỗi điểm nổi, bạn có thể không nhận được giá trị chính xác.
Cách tiếp cận đúng:
import java.math.BigDecimal;
BigDecimal a = new BigDecimal("0.1");
BigDecimal b = new BigDecimal("0.2");
BigDecimal result = a.add(b);
Tại sao truyền chuỗi?
new BigDecimal(0.1); // not recommended
Tạo từ double có thể mang theo lỗi độ chính xác của nó.
Các lỗi phổ biến
- Xử lý tiền với
double - Sử dụng
new BigDecimal(doubleValue) - Quên quy tắc làm tròn
6.3 Các Bộ Sưu Tập Yêu Cầu Các Lớp Bao Bọc
import java.util.ArrayList;
ArrayList<Integer> list = new ArrayList<>();
list.add(10);
Bạn không thể sử dụng các loại nguyên thủy trực tiếp.
ArrayList<int> list; // Compile-time error
Lý do:
- Generics (bộ sưu tập an toàn loại) chỉ hỗ trợ các loại tham chiếu
6.4 Quyết Định Dựa Trên Việc Bạn Có Cần null Không
Không cần null → các loại nguyên thủy
int age = 0;
Cần null → các lớp bao bọc
Integer age = null;
Trong tích hợp cơ sở dữ liệu hoặc đầu vào biểu mẫu, bạn có thể cần xử lý null.
6.5 Hướng Dẫn Hiệu Suất Cơ Bản
- Tính toán → các loại nguyên thủy
- Bộ sưu tập → các lớp bao bọc
- Tránh tạo bao bọc bên trong vòng lặp chặt chẽ
Ví dụ (không khuyến nghị):
for (Integer i = 0; i < 1000000; i++) { }
Sử dụng các loại nguyên thủy hiệu quả hơn.
6.6 Bảng Tóm Tắt: Các Loại Khuyến Nghị Theo Trường Hợp Sử Dụng
| Use Case | Recommended Type |
|---|---|
| Typical integers | int |
| Typical decimals | double |
| Money | BigDecimal |
| Boolean checks | boolean |
| Strings | String |
| Storing in collections | Wrapper classes |
Các Lỗi Thực Tế Phổ Biến
- Chọn các kiểu quá nhỏ không cần thiết
- Sử dụng
doublecho tiền - Thiết kế mà không xem xét
null - Các ngoại lệ auto-unboxing từ các lớp wrapper
Việc lựa chọn kiểu là một phần cốt lõi của thiết kế. Nếu bạn tiến hành một cách mơ hồ, chi phí sửa chữa các vấn đề sau này sẽ tăng đáng kể.
7. Tổng Kết Kiểu Dữ Liệu Java (Kèm Bảng)
Hãy tóm tắt mọi thứ trong một định dạng trả lời nhanh chóng cho các truy vấn tìm kiếm phổ biến. Kiểu dữ liệu Java được chia thành “kiểu nguyên thủy” và “kiểu tham chiếu.”
7.1 Danh Sách Kiểu Nguyên Thủy
| Type | Size | Default (fields) | Typical Use |
|---|---|---|---|
| byte | 8bit | 0 | Small integers |
| short | 16bit | 0 | Smaller integers |
| int | 32bit | 0 | Standard integers |
| long | 64bit | 0L | Large integers |
| float | 32bit | 0.0f | Single-precision floating point |
| double | 64bit | 0.0d | Standard floating point |
| char | 16bit | ‘\u0000’ | A single character |
| boolean | – | false | Boolean value |
- Các biến cục bộ không được khởi tạo tự động.
Các điểm chính
- Đối với các phép tính số, mặc định sử dụng
int/double - Đối với tiền, sử dụng
BigDecimal nullkhông được phép- Không có phương thức
7.2 Tổng Quan Kiểu Tham Chiếu
Các kiểu tham chiếu thường gặp:
- String
- Mảng (ví dụ,
int[]) - Kiểu lớp (các lớp tùy chỉnh)
- Các lớp wrapper (ví dụ,
Integer) - Các collection (List, Map, v.v.)
Tóm tắt các đặc điểm
| Item | Reference Types |
|---|---|
| Can assign null | Yes |
| Methods | Available |
| new keyword | Usually needed |
| Comparison | equals() recommended |
7.3 So Sánh Cuối Cùng: Nguyên Thủy vs Tham Chiếu
| Perspective | Primitive Types | Reference Types |
|---|---|---|
| Stores | Directly | By reference |
| Memory efficiency | High | Somewhat lower |
| null | No | Yes |
| Speed | Fast | Somewhat slower |
| Main use | Calculations | Object handling |
7.4 Bộ Kiểu Tối Thiểu Mà Người Mới Nên Học Đầu Tiên
Bắt đầu với bốn kiểu sau:
- int
- double
- String
- boolean
Với những kiểu này, bạn có thể xây dựng các chương trình cơ bản.
7.5 Các Sai Lầm Chung
- So sánh
Stringbằng== - Sử dụng
doublecho tiền - Không nhận ra phép chia nguyên
- Quên kiểm tra
null - Quên thêm
Lcho các literallong - Unboxing
nulltrong các lớp wrapper
Tránh những lỗi này sẽ giảm đáng kể các lỗi của người mới.
7.6 Kết Luận Cuối Cùng
- Java là một ngôn ngữ an toàn kiểu
- Hiểu các kiểu dữ liệu là nền tảng của mọi mã
- Kiểu nguyên thủy dùng cho các phép tính nhanh
- Kiểu tham chiếu dùng để quản lý đối tượng
- Lựa chọn kiểu đúng ảnh hưởng trực tiếp đến chất lượng
Câu Hỏi Thường Gặp
Q1. Có bao nhiêu kiểu dữ liệu Java?
Trả lời:
Có 8 kiểu nguyên thủy. Kiểu tham chiếu có thể vô số (các lớp, mảng, giao diện, v.v.). Điều quan trọng là trước tiên phải hiểu 8 kiểu nguyên thủy.
Q2. String có phải là kiểu nguyên thủy không?
Trả lời:
Không. String là một kiểu lớp (kiểu tham chiếu). Nó được coi như một đối tượng và có thể được gán giá trị null.
Q3. Sự khác biệt giữa int và Integer là gì?
Trả lời:
int là một kiểu nguyên thủy. Integer là một lớp wrapper (kiểu tham chiếu). Integer có thể chứa null, nhưng việc auto-unboxing có thể gây ra ngoại lệ.
Q4. Tôi có thể dùng double cho các phép tính tiền không?
Trả lời:
Kỹ thuật thì có, nhưng không được khuyến khích. Các vấn đề về độ chính xác của số thực có thể xảy ra, vì vậy sử dụng BigDecimal an toàn hơn.
Q5. Tại sao phép chia các số nguyên không cho ra kết quả thập phân?
Trả lời:
Bởi vì các phép toán trên số nguyên được thực hiện bằng kiểu nguyên, phần thập phân sẽ bị bỏ qua. Nếu bạn cần kết quả thập phân, hãy ép kiểu một trong các toán hạng sang double.
Q6. null là gì?
Trả lời:
Nó đại diện cho trạng thái không có đối tượng nào được tham chiếu. Gọi một phương thức trên null sẽ gây ra NullPointerException.
Q7. Sự khác biệt giữa == và equals() là gì?
Trả lời:
== so sánh các tham chiếu (địa chỉ bộ nhớ). equals() so sánh nội dung. Đối với so sánh chuỗi, hãy dùng equals().
Q8. Những kiểu nào nên học đầu tiên cho người mới bắt đầu?
Trả lời:
Ưu tiên học int, double, String và boolean. Đây là những kiểu cốt lõi được sử dụng phổ biến nhất trong công việc thực tế.


