報錯信息如下:
Exception in thread "main" java.lang.NullPointerException
at com.zhangjb.main.MainTest.main(MainTest.java:9)
測試代碼如下:
package com.test.main;
public class MainTest {
public static void main(String[] args) {
int age = 0;
TBean bean = new TBean();
bean.setName("admin");
age = bean.getAge();
System.out.println("age"+ age);
}
}
class TBean {
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
對着代碼看了覺得不可思議,bean 對象不可能是null,怎麼會報空指針,百思不得其姐!
後來就用反編譯工具編譯了一下,恍然大悟,第九行“age = bean.getAge();” 編譯後的代碼是:“age = bean.getAge().intValue();”
這就可以解釋了,編譯器採用了自動拆箱,而Integer類型的成員變量沒有賦值,默認是null,水落石出。