Để hiểu null có nghĩa là gì trong Java, chúng ta hãy xem xét một phép loại suy với các số: số 0 tượng trưng cho sự vắng mặt của một thứ gì đó và null có nghĩa tương tự khi nói đến các kiểu dữ liệu tham chiếu. Nếu một trường thuộc loại tham chiếu (chẳng hạn như String , Object hoặc StringBuilder ) không được gán một giá trị rõ ràng, thì, bằng cách tương tự với các loại nguyên thủy, nó sẽ nhận được một giá trị mặc định và giá trị đó là null :

Mã số Đầu ra bảng điều khiển

public class Solution {

    public static int i;
    public static String s;

    public static void main(String[] args) {
        System.out.println(i);
        System.out.println(s);
    }
}
                    
0
không

Nhưng nếu bạn khai báo một mảng như thế này:


String[] strings = new String[12];

một mảng sẽ được tạo có chứa 12 phần tử và tất cả chúng sẽ là null :

Mã số Đầu ra bảng điều khiển

public class Solution {
    public static void main(String[] args) {
        String[] strings = new String[12];

        for (int i = 0; i < strings.length; i++) {
            System.out.println("Element " + i + ":" + strings[i]);
        }
    }
}
                    
Phần tử 0: null
Phần tử 1: null
Phần tử 2: null
Phần tử 3: null
Phần tử 4: null
Phần tử 5: null
Phần tử 6: null
Phần tử 7: null
Phần tử 8: null
Phần tử 9: null
Phần tử 10: null
Phần tử 11: null

Như bạn có thể thấy, khi được nối với một chuỗi, giá trị null sẽ trở thành chuỗi " null ". Điều đó nói rằng, nếu bạn gọi phương thức toString() trên nó, như thế này:


String[] strings = null;
System.out.println(strings.toString());

thì bạn sẽ nhận được một NullPulumException (chúng ta sẽ thảo luận chi tiết về các ngoại lệ sau). Điều tương tự cũng xảy ra nếu bạn cố gắng gọi bất kỳ phương thức nào khác trên null (ngoại lệ là các phương thức tĩnh, bạn sẽ sớm biết):


public static void main(String[] args) {
    StringBuilder sb = null;
    sb.append("test"); // This will compile, but there will be a runtime error
}

null là, trong số những thứ khác, một từ khóa dành riêng (như public hoặc static ), vì vậy bạn không thể tạo một biến, phương thức hoặc lớp có tên null . Giống như những từ khóa khác, từ khóa này phân biệt chữ hoa chữ thường (bạn có thể nhận thấy rằng chúng tôi viết null bằng chữ thường ở mọi nơi). Điều đó có nghĩa là:


String firstName = Null; // Compilation error

String secondName = NULL; // Compilation error

String fullName = null; // This will compile

Hãy xem bạn có thể và không thể làm gì khác với null :

  • Bạn có thể gán null cho bất kỳ tham chiếu nào:

    
    StringBuilder sb = null;
                
  • null có thể được chuyển thành bất kỳ loại tham chiếu nào:

    
    String s = (String) null; // This will compile, but doing this doesn't make any sense :)
                
  • null không thể được gán cho một biến nguyên thủy:

    
    int i = null; // This won't compile
                
  • null có thể được so sánh bằng cách sử dụng ==!=

  • null == null trả về true

Trong các bài học trước, chúng ta đã nói về cách mọi thứ trong Java đều là một đối tượng và mỗi đối tượng đều có một kiểu.

Chúng ta có thể nói gì về null về mặt này? null là một chữ của một loại nhất định và loại này không có tên. Và vì loại này không có tên, nên không thể khai báo một biến thuộc loại này hoặc ép kiểu cho nó. Do đó, null là đại diện duy nhất của loại không tên này. Trong thực tế, chúng ta có thể bỏ qua loại này và coi null như một ký tự đặc biệt có thể được gán cho bất kỳ biến tham chiếu nào.

Những điều cần ghi nhớ:

  • null là giá trị mặc định cho các kiểu dữ liệu tham chiếu
  • null có nghĩa là "không có giá trị"
  • Nếu chúng ta gọi bất kỳ phương thức nào trên một đối tượng có giá trị là null , mã sẽ biên dịch nhưng khi chạy chúng ta sẽ nhận được NullPulumException .