CodeGym /Các khóa học /JAVA 25 SELF /Số và ký tự trong Java

Số và ký tự trong Java

JAVA 25 SELF
Mức độ , Bài học
Có sẵn

1. Có những loại số nào?

Trong lập trình, chúng ta liên tục làm việc với các con số — từ tuổi của người dùng đến số lượng ngôi sao trong thiên hà hoặc số xu lẻ trong tài khoản ngân hàng. Nhưng những bài toán khác nhau cần những loại số khác nhau: đôi khi chỉ cần lưu số nguyên, đôi khi cần các phân số rất chính xác, và đôi khi cần các số “không âm”.

Số nguyên (int và các loại khác)

Số nguyên là số không có phần thập phân.
Trong Java, kiểu được dùng thường xuyên nhất là int, nhưng ngoài ra còn có một vài lựa chọn khác, khác nhau về kích thước và phạm vi.

  • int — kiểu “làm việc” chính cho số nguyên. Nó chứa được các giá trị rất lớn (và rất nhỏ), mà lại không tốn quá nhiều bộ nhớ. Ví dụ, để đếm lượt thích, tuổi, số ngày trong năm thì gần như luôn dùng int.
  • long — dùng khi giá trị có thể rất lớn (ví dụ, hàng tỷ hoặc nghìn tỷ). Ví dụ: lưu tổng số lượt xem YouTube trong toàn bộ lịch sử.
  • short — tiết kiệm nhưng ít được dùng. Phù hợp ở nơi có nhiều giá trị nhỏ lặp lại (ví dụ, dữ liệu âm thanh, thành phần màu).
  • byte — cho các giá trị nhỏ hơn nữa, đặc biệt trong đồ họa và làm việc với tệp, nơi việc tiết kiệm bộ nhớ là quan trọng.

Số thực (double, float)

Đôi khi cần làm việc với các con số có phần thập phân. Ví dụ, nhiệt độ không khí, điểm trung bình của sinh viên, giá hàng hóa có phần lẻ.

  • double — kiểu “mặc định” để lưu số thực. Đủ chính xác cho đa số phép tính (ví dụ: 3.1415926535…).
  • float — nhẹ hơn và kém chính xác hơn, thường gặp trong đồ họa máy tính hoặc xử lý mảng dữ liệu lớn, nơi cần tiết kiệm bộ nhớ.

Các kiểu số đặc biệt

  • BigInteger — khi cần làm việc với các số khổng lồ vượt quá phạm vi chuẩn, ví dụ trong mật mã hoặc tính toán thiên văn.
  • BigDecimal — lớp dành cho tính toán chính xác với số thực (tài chính, tính lãi), giúp tránh các sai số vốn có của doublefloat.

2. Phạm vi giá trị

Các kiểu số nguyên có thể lưu cả số dương lẫn số âm. Điều này tiện khi giá trị có thể “trên hoặc dưới không”: ví dụ, nhiệt độ, số dư tài khoản, độ cao so với mực nước biển.

Ví dụ:

  • int : -10, 0, 50
  • long : 0, 10, -1000_000_000_000_000_000L

Kiểu số nguyên

Kiểu Kích thước Phạm vi giá trị Ví dụ sử dụng
byte
1 byte -128 đến 127 -128, 0, 127
short
2 byte -32 768 đến 32 767 -1000, 0, 32000
int
4 byte -2 147 483 648 đến 2 147 483 647 -1000000, 0, 2000000
long
8 byte -9 223 372 036 854 775 808
đến 9 223 372 036 854 775 807
-10_000_000_000, 1

Kiểu số thực

Kiểu Kích thước Ví dụ giá trị Mô tả
float
4 byte 3.14f, -0.001f độ chính xác đơn (7 chữ số)
double
8 byte 3.1415, -1.7E+308 độ chính xác kép (15–16 chữ số)

3. Hậu tố cho số

Trong một số tình huống, bạn cần chỉ rõ kiểu muốn dùng cho một số. Việc này được thực hiện bằng các hậu tố:

  • L hoặc l — cho kiểu long (ví dụ, 10000000000L)
  • F hoặc f — cho kiểu float (ví dụ, 3.14f)
  • D hoặc d — cho kiểu double (thường không cần, vì số thực không có hậu tố mặc định là double)

Nếu không chỉ định hậu tố, mặc định số nguyên được coi là int, còn số thực là double. Ví dụ, 42int, còn 3.14double.

Tại sao cần điều này? Ví dụ để không gặp lỗi khi gán một số lớn cho biến kiểu long:

long bigNumber = 9000000000L; // nếu bỏ L, sẽ có lỗi biên dịch

Dấu phân tách bằng dấu gạch dưới _

Khi các số quá dài, rất dễ nhầm lẫn các số 0. Để dễ nhìn và dễ đọc, trong Java bạn có thể dùng dấu gạch dưới bên trong số.

int population = 146_700_000;
long stars = 100_000_000_000L;
Sử dụng dấu gạch dưới để dễ đọc số

Điều này hoàn toàn hợp lệ: trình biên dịch sẽ bỏ qua dấu gạch dưới, còn bạn thì dễ nhìn thấy các nhóm chữ số ngay “bằng mắt”. Lưu ý — không đặt dấu gạch dưới ở đầu, cuối, ngay sau dấu chấm thập phân hoặc trước hậu tố.

4. Kiểu ký tự char: là gì và để làm gì?

Kiểu char dùng để lưu một ký tự: chữ cái, chữ số, dấu câu, khoảng trắng, ký tự đặc biệt và thậm chí cả biểu tượng cảm xúc.

Ví dụ:

char letter = 'A';
char digit = '7';
char symbol = '?';
char cyrillic = '\u0416';
char euro = '€';
char smile = '☺'; // Vâng, cũng có thể như vậy!

Các quy tắc quan trọng:

  • Giá trị kiểu char được viết trong dấu nháy đơn: 'A', '7', '#'.
  • Đó chính xác là một ký tự! Nếu viết 'AB' — trình biên dịch sẽ báo lỗi.
  • Đằng sau mỗi ký tự là một mã số riêng (Unicode).

Unicode: ký tự từ khắp thế giới

Java sử dụng tiêu chuẩn Unicode, cho phép lưu không chỉ chữ cái Latin mà còn cả chữ Cyrillic, chữ tượng hình, emoji và thậm chí cả chữ tượng hình Ai Cập cổ (nếu cần).

Thông tin thú vị:
Kiểu char về bản chất là một số 16-bit (từ 0 đến 65535), trong đó mỗi giá trị tương ứng với một ký tự.

5. Ký tự và số: liên hệ qua Unicode

Vì mỗi ký tự thực chất là một con số, ta có thể chuyển đổi char sang int và ngược lại một cách dễ dàng.

Ví dụ: lấy mã Unicode của ký tự

public class CharToInt {
    public static void main(String[] args) {
        char ch = 'A';
        int code = ch; // Chuyển đổi ngầm định char → int

        System.out.println("Mã của ký tự '" + ch + "': " + code);
    }
}

Kết quả:

Mã của ký tự 'A': 65

Và bây giờ ngược lại — lấy ký tự theo mã:

public class IntToChar {
    public static void main(String[] args) {
        int code = 1040; // Mã của chữ 'A' trong Unicode (Cyrillic)
        char ch = (char) code; // Chuyển đổi tường minh int → char

        System.out.println("Ký tự có mã " + code + ": " + ch);
    }
}

Kết quả:

Ký tự có mã 1040: \u0410

6. Các kiểu nguyên thủy cơ bản của Java

Kiểu Kích thước (bit) Phạm vi giá trị Ví dụ giá trị Ghi chú
byte
8 -128 ... 127 42 Rất hiếm khi dùng
short
16 -32,768 ... 32,767 12345 Để tiết kiệm bộ nhớ
int
32 -2,147,483,648 ... 2,147,483,647 1000000 Kiểu chính cho số nguyên
long
64 ≈ −9.22 × 1018 ... ≈ 9.22 × 1018 5000000000L Cho số nguyên rất lớn
float
32 ~±3.4 × 10-38 ... ±3.4 × 1038 3.14f Số thực, độ chính xác thấp
double
64 ~±1.7 × 10-308 ... ±1.7 × 10308 2.718 Số thực, độ chính xác cao
char
16 0 ... 65 535 (Unicode) '\u0416', 'A', '?' Một ký tự
boolean
1 true, false true Giá trị logic
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION