Câu trả lời:
Giá trị mặc định cho một Boolean
(đối tượng) là null
.
Giá trị mặc định cho một boolean
(nguyên thủy) là false
.
Giá trị mặc định của bất kỳ Object
, chẳng hạn như Boolean
, là null
.
Giá trị mặc định cho a boolean
là sai.
Lưu ý: Mỗi nguyên thủy có một lớp bao bọc. Mỗi trình bao bọc sử dụng một tham chiếu có mặc định là null
. Nguyên thủy có các giá trị mặc định khác nhau:
boolean -> false
byte, char, short, int, long -> 0
float, double -> 0.0
Lưu ý (2): void
có một trình bao bọc Void
cũng có mặc định null
và đó chỉ là giá trị có thể (không sử dụng hack).
Boolean
được Object
, mà có thể làm dòng đầu tiên có nghĩa là rõ ràng. Điều này nghe có vẻ khá cơ bản, nhưng đối với ai đó hỏi một câu hỏi cơ bản như thế này thì có thể giúp ích.
boolean
Có thể true
hoặc false
.
Giá trị mặc định là false
.
(Nguồn: Biến nguyên thủy Java )
Boolean
Có thể là một Boolean
đối tượng đại diện true
hoặc false
, hoặc có thể null
.
Giá trị mặc định là null
.
Nếu bạn cần hỏi, thì bạn cần phải khởi tạo một cách rõ ràng các trường / biến của mình, bởi vì nếu bạn phải tìm kiếm nó, thì rất có thể người khác cũng cần phải làm điều đó.
Giá trị cho một nguyên thủy boolean
là sai như có thể được nhìn thấy ở đây .
Như được đề cập bởi những người khác, giá trị cho a Boolean
sẽ là null theo mặc định.
Boolean là một đối tượng. Vì vậy, nếu đó là một biến thể, nó sẽ là null. Nếu nó được khai báo trong một phương thức, bạn sẽ phải khởi tạo nó, hoặc sẽ có lỗi trình biên dịch.
Nếu bạn khai báo là một nguyên thủy tức là boolean. Giá trị sẽ là sai theo mặc định nếu đó là một biến thể hiện (hoặc biến lớp). Nếu nó được khai báo trong một phương thức, bạn vẫn sẽ phải khởi tạo nó thành đúng hoặc sai hoặc sẽ có lỗi trình biên dịch.
Không có mặc định cho Boolean
. Boolean
phải được xây dựng với a boolean
hoặc a String
. Nếu đối tượng là không xác định, nó sẽ trỏ đếnnull
.
Giá trị mặc định của nguyên thủy boolean
làfalse
.
http://doad.oracle.com/javase/6/docs/api/java/lang/Boolean.html
https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
null
. null
là mặc định, vì vậy tôi không chắc bạn đang đề cập đến điều gì khi bạn nói không có. (Bạn có thể có nghĩa gì đó như " Boolean
không phải true
cũng không phải false
mặc định" không?)
class BooleanTester
{
boolean primitive;
Boolean object;
public static void main(String[] args) {
BooleanTester booleanTester = new BooleanTester();
System.out.println("primitive: " + booleanTester.getPrimitive());
System.out.println("object: " + booleanTester.getObject());
}
public boolean getPrimitive() {
return primitive;
}
public Boolean getObject() {
return object;
}
}
đầu ra:
primitive: false
object: null
Điều này có vẻ hiển nhiên nhưng tôi đã gặp phải tình huống Jackson, trong khi tuần tự hóa một đối tượng thành JSON, đã ném NPE sau khi gọi một getter, giống như trường hợp này, trả về một boolean nguyên thủy không được gán. Điều này khiến tôi tin rằng Jackson đã nhận được null và cố gắng gọi một phương thức trên đó, do đó là NPE. Tôi đã sai.
Đạo đức của câu chuyện là khi Java phân bổ bộ nhớ cho một nguyên thủy, bộ nhớ đó có một giá trị ngay cả khi không được khởi tạo, mà Java tương đương với sai cho boolean. Ngược lại, khi phân bổ bộ nhớ cho một đối tượng phức tạp chưa được khởi tạo như Boolean, nó chỉ phân bổ không gian cho một tham chiếu đến đối tượng đó, chứ không phải chính đối tượng - không có đối tượng nào trong bộ nhớ để tham chiếu - vì vậy việc giải quyết kết quả tham chiếu đó là null.
Tôi nghĩ rằng nói đúng ra, "mặc định là sai" là một chút sai lầm. Tôi nghĩ rằng Java không phân bổ bộ nhớ và gán cho nó một giá trị sai cho đến khi nó được đặt rõ ràng; Tôi nghĩ rằng Java phân bổ bộ nhớ và bất kỳ giá trị nào mà bộ nhớ xảy ra đều giống như giá trị của 'false'. Nhưng với mục đích thực tế, chúng là cùng một thứ.