首先,我不是Java的专家。所以我的问题可能很愚蠢。如果我弄错了,请原谅。这是来自OCJP MCQ。我写了以下代码
public class Test{
Integer a;
int b;
public Test(Integer x) {
b = a+x;
System.out.println(""+b);
}
public static void main(String... str)
{
new Test(new Integer("10"));
}}
输出:线程“main”中的异常java.lang.NullPointerException
我心中有以下问题,
1。在Integer a
语句执行之前,int b
和b=a+x;
是否已初始化为
2。为什么抛出NullPointerException。
非常感谢您的回复!!
答案 0 :(得分:3)
所有对象引用都在Java中初始化为null
。这意味着属性Integer a
将为null,因为它尚未初始化。因此,这意味着在执行b = a+x;
时,您实际上是将变量x
添加到a
的引用变量null
。
初始化属性Integer a
:
Integer a = new Integer(0);
答案 1 :(得分:1)
您点击下面的reason specified in Docs
,
Calling the instance method of a null object.
默认情况下,引用将初始化为null
,其中orimirives设置为默认原始值。
Data Type Default Value (for fields)
byte 0
short 0
int 0
long 0L
float 0.0f
double 0.0d
char '\u0000'
**String (or any object) null** //Integer is Object, int is not
boolean false
当您尝试进行拆箱时,即
wrapperIntegerObject.intValue(); //wrapperIntegerObject is null
答案 2 :(得分:1)
null +您将获得NullPointerException的任何数字。
说明试试下面的代码。
static Integer a;
public static void main(String[] ar) {
System.out.println(a);
System.out.println(a+10);
}