2013-05-22 43 views
64

Tôi đang làm việc trong Java.Đối tượng Uninitialized vs Object Khởi tạo thành NULL

Tôi thường thiết lập một số đối tượng như vậy:

public class Foo { 
    private SomeObject someName; 

    // do stuff 

    public void someMethod() { 
     if (this.someName != null) { 
      // do some stuff 
     } 
    } 
} 

Câu hỏi đặt ra là: Liệu someName trong ví dụ này tương đương với null, như trong tôi có thể reliably for all objects giả null-kiểm tra đối tượng chưa được khởi tạo sẽ chính xác?

Trả lời

85

Chính xác, cả thành viên tĩnh và cá thể của loại tham chiếu không được khởi tạo rõ ràng được đặt thành null bằng Java. Quy tắc tương tự áp dụng cho các thành viên mảng.

Từ Java Language Specification, phần 4.12.5:

Giá trị ban đầu của biến

Mỗi biến trong một chương trình phải có giá trị trước khi giá trị của nó được sử dụng:

Mỗi lớp biến, biến mẫu hoặc thành phần mảng được khởi tạo với giá trị mặc định là khi được tạo

[...] Đối với tất cả các loại tham chiếu, giá trị mặc định là null.

Lưu ý rằng quy tắc trên loại trừ biến cục bộ: chúng phải được khởi tạo rõ ràng, nếu không chương trình sẽ không biên dịch.

+0

cách áp dụng điều này, ví dụ: 'char'? Tôi có thể làm 'char test;' nhưng không phải 'char test = null;' – xorinzor

+1

@xorinzor Bạn không thể gán 'null' cho' char' vì nó là kiểu nguyên thủy. Ngoài ra, bạn không thể thực hiện 'char test;' bên trong một phương thức mà không gán 'test' sau này. Bạn có thể làm 'char test = 'a'' nếu bạn muốn, hoặc để nó như' char test; 'trong khai báo thành viên để nhận giá trị mặc định của'' \ 0''. – dasblinkenlight

9

Nếu tham chiếu Object đã được khai báo nhưng không được khởi tạo, giá trị của nó là null.

+7

Chỉ như một trường thể hiện của một lớp. –

+1

@SotiriosDelimanolis bạn có thể xây dựng được không? Tôi đang cố gắng tìm hiểu :) – SnakeDoc

+5

@SnakeDoc Nếu bạn khai báo một đối tượng trong một thân phương thức, bạn sẽ nhận được một lỗi biên dịch nếu bạn cố gắng sử dụng nó mà không cần khởi tạo nó lần đầu tiên. –

Các vấn đề liên quan