0

[Java Backend Zero to Hello] BÀI 1.2: BIẾN, KIỂU DỮ LIỆU, TOÁN TỬ

Java Backend Zero to Hello

📚 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ồi nextLine(), cần thêm sc.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

Viblo
Let's register a Viblo Account to get more interesting posts.