So sánh giá object và null năm 2024

null có phải là một đối tượng không? Tôi hoàn toàn có thể nói rằng không phải vậy. Theo nghĩa là (null instanceof Object)`nó sẽ cho giá trị `false. Đây là những gì bạn cần biết về null:

So sánh giá object và null năm 2024

  1. Bạn không thể gọi một phương thức có giá trị null: x.m()`nó sẽ báo lỗi khi `x`giá trị đó là null và `m`phương thức đó không tĩnh. Nhân tiện, nếu `mđó là một phương thức tĩnh thì mọi thứ đều ổn, vì chỉ có lớp là quan trọng `x`và giá trị bị bỏ qua.
  2. Chỉ có một giá trị rỗng cho tất cả và không có giá trị rỗng riêng cho mỗi lớp. Vì vậy,

    // null означает пустое дерево // обратите внимание на статические и нестатические методы class Node { Object data; Node left, right; void static print(Node node) {

    if (node != null) node.print();  
    
    } void print() {
    print(left);  
    System.out.println(data);  
    print(right);  
    
    } }

    0ví dụ.

  3. Hoàn toàn có thể chấp nhận được việc truyền null làm tham số cho một phương thức nếu phương thức đó cho phép điều đó (một số phương thức cho phép tham số null, một số khác thì không). Vì vậy, ví dụ, bạn có thể viết tốt

    // null означает пустое дерево // обратите внимание на статические и нестатические методы class Node { Object data; Node left, right; void static print(Node node) {

    if (node != null) node.print();  
    
    } void print() {
    print(left);  
    System.out.println(data);  
    print(right);  
    
    } }

    1, nhưng nó

    // null означает пустое дерево // обратите внимание на статические и нестатические методы class Node { Object data; Node left, right; void static print(Node node) {

    if (node != null) node.print();  
    
    } void print() {
    print(left);  
    System.out.println(data);  
    print(right);  
    
    } }

    2sẽ không hoạt động. Vì vậy, hãy luôn chỉ ra trong nhận xét javadoc về các phương thức của bạn xem null có được chấp nhận làm tham số của chúng hay không, nếu điều đó không hoàn toàn rõ ràng.

  4. Trong JDK từ phiên bản 1.1 đến 1.1.5, việc chuyển null dưới dạng đối số theo nghĩa đen cho hàm tạo của lớp bên trong ẩn danh (ví dụ:

    // null означает пустое дерево // обратите внимание на статические и нестатические методы class Node { Object data; Node left, right; void static print(Node node) {

    if (node != null) node.print();  
    
    } void print() {
    print(left);  
    System.out.println(data);  
    print(right);  
    
    } }

    3gây ra lỗi trình biên dịch. Tuy nhiên, bạn có thể chuyển một biểu thức có giá trị null hoặc chuyển một giá trị bắt buộc null, ở dạng

    // null означает пустое дерево // обратите внимание на статические и нестатические методы class Node { Object data; Node left, right; void static print(Node node) {

    if (node != null) node.print();  
    
    } void print() {
    print(left);  
    System.out.println(data);  
    print(right);  
    
    } }

    4

  5. Có ít nhất ba trường hợp khác nhau, thường được biểu thị bằng null:

    • Chưa được khởi tạo (không khởi tạo). Một biến hoặc vị trí chưa được gán bất kỳ giá trị nào.
    • Không tồn tại/không áp dụng được . Ví dụ: các nút cuối của cây nhị phân có thể được gọi là các nút thông thường có con rỗng.
    • Trống rỗng (sự trống rỗng của một cái gì đó). Ví dụ: bạn có thể sử dụng null để biểu thị một cây trống. Lưu ý rằng điều này khá khác so với trường hợp trước (chúng thường bị nhầm lẫn trong thực tế). Sự khác biệt là liệu null có phải là nút cây có thể chấp nhận được hay không hay null có nghĩa là giá trị không cần phải được coi là nút cây.

So sánh ba cách triển khai nút cây nhị phân với các phương thức đầu ra của bảng điều khiển tuần tự:

  1. // null означает «не применимо» // Здесь нет пустого дерева. class Node { Object data; Node left, right; void print() {

    if (left != null)  
      left.print();  
    System.out.println(data);  
    if (right != null)  
      right.print();  
    
    } }

  2. // null означает пустое дерево // обратите внимание на статические и нестатические методы class Node { Object data; Node left, right; void static print(Node node) {

    if (node != null) node.print();  
    
    } void print() {
    print(left);  
    System.out.println(data);  
    print(right);  
    
    } }

  3. // Отдельный класс для Empty // null не используется interface Node { void print(); } class DataNode implements Node{ Object data; Node left, right; void print() {

    left.print();  
    System.out.println(data);  
    right.print();  
    
    } } class EmptyNode implements Node { void print() { } }

Tác giả câu trả lời: Peter Norvig, nhà khoa học người Mỹ trong lĩnh vực trí tuệ nhân tạo, giám đốc nghiên cứu tại Google