What are the default values of boolean
(primitive) and Boolean
(primitive wrapper) in Java?

- 30,738
- 21
- 105
- 131

- 17,117
- 17
- 63
- 86
8 Answers
The default value for a Boolean
(object) is null
.
The default value for a boolean
(primitive) is false
.

- 22,068
- 12
- 57
- 89

- 62,492
- 12
- 87
- 94
The default value of any Object
, such as Boolean
, is null
.
The default value for a boolean
is false.
Note: Every primitive has a wrapper class. Every wrapper uses a reference which has a default of null
. Primitives have different default values:
boolean -> false
byte, char, short, int, long -> 0
float, double -> 0.0
Note (2): void
has a wrapper Void
which also has a default of null
and is it's only possible value (without using hacks).

- 5,751
- 4
- 49
- 59

- 525,659
- 79
- 751
- 1,130
-
2I think one could mention `Boolean` is `Object`, that would make the first line meaning obvious. This sounds pretty basic, but for someone asking a basic question like this it may help. – Suma Jul 03 '18 at 10:48
boolean
Can be true
or false
.
Default value is false
.
(Source: Java Primitive Variables)
Boolean
Can be a Boolean
object representing true
or false
, or can be null
.
Default value is null
.
If you need to ask, then you need to explicitly initialize your fields/variables, because if you have to look it up, then chances are someone else needs to do that too.
The value for a primitive boolean
is false as can be seen here.
As mentioned by others the value for a Boolean
will be null by default.

- 20,799
- 66
- 75
- 101

- 34,983
- 11
- 83
- 114
-
1Thank you for reference to official source. As to initialization, there is no need to compensate for a lack of knowledge. – LoBo Oct 29 '15 at 13:07
-
2'Lack of knowledge' implies that there is some expected level to compare to. If this minimal knowledge level is clear, I agree. If not, I find it prudent to err on being more explicit. In all this is a rather personal/team decision/opinion. – Peter Tillemans Oct 29 '15 at 14:56
-
4@LoBo - I think there is nothing wrong with compensating for a potential lack of knowledge. You don't know who will be maintaining your code down the line. Anything that makes your code more easily understood and/or readable, while having little impact on performance, can only be a good thing. – ferekdoley Jan 14 '16 at 14:04
-
I agree with @Lobo on this one. You should assume your future code reader knows how to write Java code. It is a bad idea to explain how Java works, in the code. That's what stackoverflow is for. – Freddie Aug 26 '20 at 13:45
Boolean is an Object. So if it's an instance variable it will be null. If it's declared within a method you will have to initialize it, or there will be a compiler error.
If you declare as a primitive i.e. boolean. The value will be false by default if it's an instance variable (or class variable). If it's declared within a method you will still have to initialize it to either true or false, or there will be a compiler error.

- 12,469
- 5
- 50
- 51
There is no default for Boolean
. Boolean
must be constructed with a boolean
or a String
. If the object is unintialized, it would point to null
.
The default value of primitive boolean
is false
.
http://download.oracle.com/javase/6/docs/api/java/lang/Boolean.html
https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

- 37,180
- 14
- 90
- 125

- 10,156
- 22
- 100
- 176
-
I think those 3 downvotes are because you say "there is no default" which is a fairly unclear statement. As you say, an uninitialized object reference points to `null`. `null` is the default, so I'm not sure what you are referring to when you say there isn't one. (Did you maybe mean something like "`Boolean` is neither `true` nor `false` by default"?) – Radiodef Jul 03 '18 at 21:57
-
Yes, what you put is more accurate. There is already an accepted answer that is more concise. I'm not sure what is gained by both downvoting a post and editing it. – Stealth Rabbi Jul 04 '18 at 23:16
-
1To clarify, I didn't downvote and my edit was completely unrelated to my comment. I'd recommend editing the answer if you approve of that suggested phrasing, and then we can delete our comments to clean up. – Radiodef Jul 04 '18 at 23:28
-
This answer contains misleading/partially false information and it should be downvoted/removed in its current state. – improbable May 27 '21 at 21:57
-
@improbable what is misleading / partially false? Can you clarify? – Stealth Rabbi May 28 '21 at 12:43
-
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;
}
}
output:
primitive: false
object: null
This seems obvious but I had a situation where Jackson, while serializing an object to JSON, was throwing an NPE after calling a getter, just like this one, that returns a primitive boolean which was not assigned. This led me to believe that Jackson was receiving a null and trying to call a method on it, hence the NPE. I was wrong.
Moral of the story is that when Java allocates memory for a primitive, that memory has a value even if not initialized, which Java equates to false for a boolean. By contrast, when allocating memory for an uninitialized complex object like a Boolean, it allocates only space for a reference to that object, not the object itself - there is no object in memory to refer to - so resolving that reference results in null.
I think that strictly speaking, "defaults to false" is a little off the mark. I think Java does not allocate the memory and assign it a value of false until it is explicitly set; I think Java allocates the memory and whatever value that memory happens to have is the same as the value of 'false'. But for practical purpose they are the same thing.

- 357
- 1
- 2
- 13