1

首先,我不是 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并初始化为0int bb=a+x;

2. 为什么会抛出 NullPointerException。

您的回复将不胜感激!!

4

3 回答 3

3

所有对象引用都null在 Java 中初始化。所以这意味着该属性Integer a将为空,因为它尚未初始化。因此,这意味着当b = a+x;被执行时,您实际上是在将变量添加x到引用变量a中,即null.

初始化属性Integer a

Integer a = new Integer(0);
于 2013-11-10T11:47:42.817 回答
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
于 2013-11-10T11:46:51.970 回答
1

null+任何数字,您将得到 NullPointerException。

为了说明尝试下面的代码。

  static Integer a;
  public static void main(String[] ar) {
       System.out.println(a);
       System.out.println(a+10);
  }
于 2013-11-10T12:04:02.927 回答