Відповіді:
Значенням Boolean(об'єктом) за замовчуванням є null.
Значенням за замовчуванням для boolean(примітиву) є false.
Значенням за замовчуванням будь-якого Object, наприклад Boolean, є null.
Значення за замовчуванням для а booleanє помилковим.
Примітка. Кожен примітив має клас обгортки. Кожна обгортка використовує посилання, яке має за замовчуванням null. Примітиви мають різні значення за замовчуванням:
boolean -> false
byte, char, short, int, long -> 0
float, double -> 0.0
Примітка (2): void має обгортку, Voidяка також має за замовчуванням nullі є лише можливим значенням (без використання хак).
Booleanце Object, що б перша лінія означає очевидне. Це звучить досить просто, але для когось, хто задає таке основне питання, це може допомогти.
булева
Може бути trueабо false.
Значення за замовчуванням - false.
(Джерело: Примітивні змінні Java )
Boolean
Може бути Booleanоб'єкт , який представляє trueабо false, або може бути null.
Значення за замовчуванням - null.
Якщо вам потрібно запитати, то вам потрібно явно ініціалізувати свої поля / змінні, адже якщо вам доведеться їх шукати, то ймовірність, що хтось інший теж повинен це зробити.
Значення для примітиву booleanхибне, як це можна побачити тут .
Як зазначають інші, значення Booleanза замовчуванням буде за замовчуванням нульовим.
Булев - об’єкт. Тож якщо це змінна інстанція, вона буде нульовою. Якщо це оголошено в рамках методу, вам доведеться його ініціалізувати, або виникла помилка компілятора.
Якщо ви декларуєте як примітив, тобто булевий. Значення за замовчуванням буде помилковим, якщо це змінна інстанція (або змінна клас). Якщо це оголошено в рамках методу, вам все одно доведеться ініціалізувати його на істинне чи хибне, або виникла помилка компілятора.
Неініціалізований Booleanчлен (фактично посилання на об'єкт типу Boolean) матиме значення за замовчуванням null.
Неініціалізований boolean(примітивний) член матиме значення за замовчуванням false.
Не існує за замовчуванням для Boolean. Booleanповинні бути побудовані з a booleanабо a String. Якщо об’єкт неінтинізований, це вказувало б null.
Значенням за замовчуванням примітиву booleanє 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за замовчуванням, тому я не впевнений, на що ви звертаєтесь, коли ви говорите, що такого немає. (Ви, мабуть, мали на увазі щось на кшталт " Booleanні, trueні falseза замовчуванням"?)
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;
}
}
вихід:
primitive: false
object: null
Це здається очевидним, але у мене виникла ситуація, коли Джексон, серіалізуючи об'єкт на JSON, кинув NPE після виклику геттера, як і цей, який повертає примітивний бул, який не був призначений. Це змусило мене повірити, що Джексон отримує нуль і намагається викликати метод на ньому, отже, NPE. Я був неправий.
Мораль історії полягає в тому, що коли Java виділяє пам'ять для примітиву, ця пам'ять має значення, навіть якщо не ініціалізовано, яке Java прирівнюється до помилкового для булевого. Навпаки, при виділенні пам'яті для неініціалізованого складного об'єкта, такого як булевий, він виділяє лише простір для посилання на цей об’єкт, а не на сам об'єкт - немає жодного об'єкта в пам'яті, на який слід посилатися, - тому вирішення цього посилання призводить до нуля.
Я вважаю, що строго кажучи, "за замовчуванням до помилкового" це трохи поза межею. Я думаю, що Java не виділяє пам'ять і не присвоює їй значення false, поки не буде явно встановлено; Я думаю, що Java виділяє пам'ять, і будь-яке значення, яке має пам'ять, те саме, що значення "false". Але з практичної мети вони те саме.