Відповіді:
Значенням 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". Але з практичної мети вони те саме.