[Java Backend Zero to Hello] BÀI 1.2: BIẾN, KIỂU DỮ LIỆU, TOÁN TỬ
📚 Bài viết thuộc series Java Backend Zero to Hello 📌 Phần: Phase 1: Java Core Cơ Bản | Bài 4/86
BÀI 1.2: BIẾN, KIỂU DỮ LIỆU, TOÁN TỬ
Mục tiêu
- Hiểu khái niệm biến và cách khai báo
- Nắm 8 kiểu dữ liệu nguyên thủy và kiểu tham chiếu
- Sử dụng các toán tử trong Java
- Thực hành ép kiểu và nhập xuất dữ liệu
1. BIẾN (VARIABLE)
Biến là vùng nhớ lưu trữ giá trị, có tên và kiểu dữ liệu xác định.
Cú pháp khai báo
<kiểu dữ liệu> <tên biến> = <giá trị>;
Ví dụ
int age = 25;
String name = "Nguyễn Văn A";
double salary = 1500.50;
boolean isActive = true;
Quy tắc đặt tên biến
- Bắt đầu bằng chữ cái,
_hoặc$ - Không bắt đầu bằng số
- Không trùng từ khóa Java (
int,class,public...) - Có phân biệt hoa thường:
age≠Age
2. KIỂU DỮ LIỆU NGUYÊN THỦY (PRIMITIVE TYPES)
Java có 8 kiểu nguyên thủy:
| Kiểu | Kích thước | Phạm vi | Mặc định | Ví dụ |
|---|---|---|---|---|
byte |
1 byte | -128 → 127 | 0 | byte b = 100; |
short |
2 bytes | -32,768 → 32,767 | 0 | short s = 1000; |
int |
4 bytes | -2³¹ → 2³¹-1 | 0 | int i = 100000; |
long |
8 bytes | -2⁶³ → 2⁶³-1 | 0L | long l = 100000L; |
float |
4 bytes | ~7 chữ số thập phân | 0.0f | float f = 3.14f; |
double |
8 bytes | ~15 chữ số thập phân | 0.0d | double d = 3.14; |
char |
2 bytes | 0 → 65,535 | '\u0000' | char c = 'A'; |
boolean |
1 bit | true/false | false | boolean b = true; |
Ví dụ chi tiết
byte age = 25;
short yearOfBirth = 2000;
int population = 1000000;
long worldPopulation = 8000000000L; // L ở cuối cho long
float price = 19.99f; // f ở cuối cho float
double pi = 3.141592653589793;
char grade = 'A';
char unicodeChar = '\u0041'; // 'A'
boolean isJavaFun = true;
boolean isFishTasty = false;
3. KIỂU DỮ LIỆU THAM CHIẾU (REFERENCE TYPES)
Lưu trữ địa chỉ của đối tượng trong bộ nhớ Heap.
String name = "Hello"; // String
int[] numbers = {1, 2, 3}; // Array
User user = new User(); // Object
So sánh Primitive vs Reference
int a = 10;
int b = a; // Sao chép giá trị
b = 20;
System.out.println(a); // 10 (không đổi)
int[] arr1 = {1, 2, 3};
int[] arr2 = arr1; // Sao chép tham chiếu
arr2[0] = 99;
System.out.println(arr1[0]); // 99 (cùng tham chiếu)
4. ÉP KIỂU (TYPE CASTING)
Ép kiểu ngầm định (Widening - tự động)
int i = 100;
long l = i; // int → long (OK, an toàn)
double d = l; // long → double (OK)
Ép kiểu tường minh (Narrowing - thủ công)
double d = 9.78;
int i = (int) d; // double → int, mất phần thập phân → i = 9
long l = 100000L;
int i2 = (int) l; // Có thể mất dữ liệu nếu l > Integer.MAX_VALUE
Ép kiểu String ↔ Số
// String → int
String s = "123";
int num = Integer.parseInt(s);
int num2 = Integer.valueOf(s); // Trả về Integer
// int → String
int x = 100;
String str1 = String.valueOf(x);
String str2 = Integer.toString(x);
String str3 = x + ""; // Nối chuỗi
5. TOÁN TỬ (OPERATORS)
5.1 Toán tử số học
int a = 10, b = 3;
System.out.println(a + b); // 13 - Cộng
System.out.println(a - b); // 7 - Trừ
System.out.println(a * b); // 30 - Nhân
System.out.println(a / b); // 3 - Chia lấy nguyên
System.out.println(a % b); // 1 - Chia lấy dư
5.2 Toán tử tăng/giảm
int x = 5;
System.out.println(x++); // 5 (in trước, tăng sau)
System.out.println(x); // 6
int y = 5;
System.out.println(++y); // 6 (tăng trước, in sau)
System.out.println(y); // 6
5.3 Toán tử so sánh
int a = 10, b = 20;
System.out.println(a == b); // false
System.out.println(a != b); // true
System.out.println(a > b); // false
System.out.println(a < b); // true
System.out.println(a >= b); // false
System.out.println(a <= b); // true
5.4 Toán tử logic
boolean x = true, y = false;
System.out.println(x && y); // false - AND
System.out.println(x || y); // true - OR
System.out.println(!x); // false - NOT
5.5 Toán tử gán
int a = 10;
a += 5; // a = a + 5 → 15
a -= 3; // a = a - 3 → 12
a *= 2; // a = a * 2 → 24
a /= 4; // a = a / 4 → 6
a %= 4; // a = a % 4 → 2
5.6 Toán tử bitwise
int a = 5; // 0101
int b = 3; // 0011
System.out.println(a & b); // 1 - AND
System.out.println(a | b); // 7 - OR
System.out.println(a ^ b); // 6 - XOR
System.out.println(~a); // -6 - NOT
System.out.println(a << 1); // 10 - Dịch trái
System.out.println(a >> 1); // 2 - Dịch phải
5.7 Toán tử ba ngôi (Ternary)
int age = 20;
String status = (age >= 18) ? "Người lớn" : "Trẻ em";
System.out.println(status); // Người lớn
6. NHẬP XUẤT DỮ LIỆU
Xuất ra màn hình
System.out.print("Hello"); // Không xuống dòng
System.out.println("Hello"); // Có xuống dòng
System.out.printf("Tuổi: %d", 25); // Định dạng
Các format specifier phổ biến
| Specifier | Kiểu | Ví dụ |
|---|---|---|
%d |
Số nguyên | printf("%d", 25) |
%f |
Số thực | printf("%.2f", 3.14) |
%s |
Chuỗi | printf("%s", "Java") |
%c |
Ký tự | printf("%c", 'A') |
%b |
Boolean | printf("%b", true) |
%n |
Xuống dòng | printf("Hello%nWorld") |
Nhập từ bàn phím với Scanner
import java.util.Scanner;
public class InputExample {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("Nhập tên: ");
String name = sc.nextLine();
System.out.print("Nhập tuổi: ");
int age = sc.nextInt();
System.out.print("Nhập lương: ");
double salary = sc.nextDouble();
System.out.printf("Tên: %s, Tuổi: %d, Lương: %.2f%n",
name, age, salary);
sc.close(); // Đóng Scanner
}
}
⚠️ Lưu ý: Khi dùng
nextInt()rồinextLine(), cần thêmsc.nextLine()để tiêu thụ ký tự xuống dòng còn sót.
7. HẰNG SỐ (CONSTANT)
Dùng từ khóa final để khai báo hằng số - giá trị không thể thay đổi.
final double PI = 3.14159;
final int MAX_USERS = 100;
final String APP_NAME = "MyApp";
// PI = 3.14; // Lỗi biên dịch - không thể gán lại
Quy ước: Hằng số đặt tên bằng UPPER_SNAKE_CASE.
8. PHẠM VI BIẾN (VARIABLE SCOPE)
public class ScopeExample {
// Biến instance (thuộc về đối tượng)
int instanceVar = 10;
// Biến static (thuộc về class)
static int staticVar = 20;
public void method() {
// Biến local (chỉ tồn tại trong method)
int localVar = 30;
if (true) {
// Biến block (chỉ tồn tại trong block)
int blockVar = 40;
System.out.println(blockVar);
}
// blockVar không truy cập được ở đây
}
}
9. BÀI TẬP THỰC HÀNH
Bài 1: Tính chu vi và diện tích hình tròn
Nhập bán kính, tính chu vi (2πr) và diện tích (πr²).
Bài 2: Chuyển đổi giờ phút giây
Nhập tổng số giây, in ra giờ:phút:giây. Ví dụ: 3661 giây → 1:01:01
Bài 3: Tính BMI
BMI = weight / (height * height)
Phân loại: <18.5 (gầy), 18.5-24.9 (bình thường), ≥25 (thừa cân).
Bài 4: Tính tiền lãi
Nhập số tiền gửi, lãi suất năm, số tháng gửi. Tính tiền lãi:
Tiền lãi = Số tiền * Lãi suất năm / 12 * Số tháng
10. TÓM TẮT
| Khái niệm | Điểm chính |
|---|---|
| Primitive types | 8 kiểu: byte, short, int, long, float, double, char, boolean |
| Reference types | Lưu địa chỉ: String, Array, Object |
| Ép kiểu | Widening (tự động), Narrowing (thủ công) |
| Toán tử | Số học, so sánh, logic, gán, bitwise, ternary |
| Scanner | Nhập dữ liệu từ bàn phím |
| final | Khai báo hằng số |
Bài tiếp theo: 1.3 Cấu trúc điều khiển
🧭 Điều Hướng Series
⬅️ Bài trước: BÀI 1.1: GIỚI THIỆU JAVA & CÀI ĐẶT MÔI TRƯỜNG
📋 Lộ trình tổng quan: Xem Toàn Bộ Series
➡️ Bài tiếp theo: BÀI 1.3: CẤU TRÚC ĐIỀU KHIỂN
All rights reserved