Answers:
的任何默认值Object
,例如Boolean
,是null
。
a的默认值为boolean
false。
注意:每个原语都有一个包装器类。每个包装器都使用默认值为的引用null
。基元具有不同的默认值:
boolean -> false
byte, char, short, int, long -> 0
float, double -> 0.0
注意(2): void
具有包装器Void
,该包装器也具有默认值,null
并且它是唯一可能的值(不使用hack)。
Boolean
是Object
,这会使第一行的含义显而易见。这听起来很基础,但是对于有人问这样的基本问题可能会有所帮助。
布尔值是一个对象。因此,如果它是一个实例变量,它将为null。如果在方法中声明了它,则必须对其进行初始化,否则会出现编译器错误。
如果声明为基本类型,即布尔值。如果该值是实例变量(或类变量),则默认情况下为false。如果在方法中声明了它,则仍然必须将其初始化为true或false,否则会出现编译器错误。
没有的默认设置Boolean
。Boolean
必须使用boolean
或构造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时,在像这样调用getter并返回未分配的原始布尔值后,抛出NPE。这使我相信杰克逊正在接收一个null并尝试对其调用方法,因此调用了NPE。我错了。
故事的寓意是,当Java为原语分配内存时,即使未初始化该内存也具有一个值,对于布尔值,Java等于false。相比之下,当为未初始化的复杂对象(如布尔值)分配内存时,它仅分配用于对该对象的引用的空间,而不分配对象本身(内存中没有要引用的对象),因此解析该引用将导致null。
我认为严格来说,“默认为false”是不合理的。我认为Java在显式设置之前不会分配内存并将其分配为false值。我认为Java会分配内存,并且内存碰巧具有的任何值都与“ false”的值相同。但是出于实际目的,它们是同一回事。