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 booleanto 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, Voidktóre ma również wartość domyślną nulli jest to jedyna możliwa wartość (bez użycia hacków).
Booleanjest 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ć truelub false.
Wartość domyślna to false.
(Źródło: Java Primitive Variables )
Boolean
Może być Booleanobiektem reprezentującym truelub 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 booleanjest fałszywa, co można zobaczyć tutaj .
Jak wspomniano przez innych, wartość a Booleanbę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. Booleanmusi być zbudowany za pomocą a booleanlub a String. Jeśli obiekt jest niezainicjowany, wskazywałby null.
Domyślna wartość operacji podstawowej booleanto false.
http://download.oracle.com/javase/6/docs/api/java/lang/Boolean.html
https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
null. nulljest 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 „ Booleannie jest trueani falsedomyś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.