Odpowiedzi:
Domyślna wartość Boolean
(obiektu) to null
.
Domyślna wartość boolean
(pierwotna) to false
.
Domyślna wartość dowolnej Object
, takiej jak Boolean
, to null
.
Wartość domyślna dla a boolean
to false.
Uwaga: każdy element pierwotny ma klasę opakowania. Każde opakowanie wykorzystuje odniesienie, które ma wartość domyślną null
. Prymitywy mają różne wartości domyślne:
boolean -> false
byte, char, short, int, long -> 0
float, double -> 0.0
Uwaga (2): void
ma opakowanie, Void
które ma również wartość domyślną null
i jest to jedyna możliwa wartość (bez użycia hacków).
Boolean
jest Object
, że może sprawić, że pierwsza linia oznacza oczywiste. Brzmi to dość prosto, ale dla kogoś, kto zadaje takie podstawowe pytanie, może to pomóc.
boolean
Może być true
lub false
.
Wartość domyślna to false
.
(Źródło: Java Primitive Variables )
Boolean
Może być Boolean
obiektem reprezentującym true
lub false
, lub może być null
.
Wartość domyślna to null
.
Jeśli musisz zapytać, musisz jawnie zainicjować swoje pola / zmienne, ponieważ jeśli musisz to sprawdzić, istnieje szansa, że ktoś inny też to zrobi.
Wartość prymitywu boolean
jest fałszywa, co można zobaczyć tutaj .
Jak wspomniano przez innych, wartość a Boolean
będzie domyślnie pusta.
Boolean to obiekt. Więc jeśli jest to zmienna instancji, będzie zerowa. Jeśli zostanie zadeklarowany w ramach metody, będziesz musiał ją zainicjować lub wystąpi błąd kompilatora.
Jeśli zadeklarujesz jako prymityw, tj. Boolean. Wartość będzie domyślnie fałszywa, jeśli jest to zmienna instancji (lub zmienna klasy). Jeśli zostanie zadeklarowany w ramach metody, nadal będziesz musiał zainicjować wartość true lub false, albo wystąpi błąd kompilatora.
Nie ma wartości domyślnej dla Boolean
. Boolean
musi być zbudowany za pomocą a boolean
lub a String
. Jeśli obiekt jest niezainicjowany, wskazywałby null
.
Domyślna wartość operacji podstawowej boolean
to false
.
http://download.oracle.com/javase/6/docs/api/java/lang/Boolean.html
https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
null
. null
jest ustawieniem domyślnym, więc nie jestem pewien, o czym mówisz, gdy mówisz, że nie ma. (Czy miałeś na myśli coś w stylu „ Boolean
nie jest true
ani false
domyślnie”?)
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;
}
}
wynik:
primitive: false
object: null
Wydaje się to oczywiste, ale miałem sytuację, w której Jackson, serializując obiekt do JSON, rzucał NPE po wywołaniu gettera, tak jak ten, który zwraca prymitywną wartość logiczną, której nie przypisano. Doprowadziło mnie to do przekonania, że Jackson otrzymywał zero i próbował nazwać metodę, stąd NPE. Myliłem się.
Morał tej historii jest taki, że gdy Java przydziela pamięć prymitywowi, pamięć ta ma wartość, nawet jeśli nie jest zainicjowana, co dla Javy jest równe false dla wartości logicznej. Natomiast przy alokacji pamięci dla niezainicjowanego obiektu złożonego, takiego jak wartość logiczna, alokuje on tylko miejsce na odwołanie do tego obiektu, a nie na sam obiekt - nie ma obiektu w pamięci, do którego można by się odwoływać - więc rozwiązanie tego odwołania powoduje, że wartość jest pusta.
Myślę, że ściśle mówiąc „domyślnie fałsz” jest trochę poza zasięgiem. Myślę, że Java nie przydziela pamięci i nie przypisuje jej wartości false, dopóki nie zostanie jawnie ustawiona; Myślę, że Java przydziela pamięć i każda wartość, jaką ma pamięć, jest taka sama jak wartość „fałsz”. Ale ze względów praktycznych są one tym samym.