自动装箱和拆箱是编译时过程。
我们可以通过如下所述的小测试来验证:
创建一个名为“Crap”的 Java 项目。在其中,创建一个包含以下内容的 .java 文件:
public class Crap {
private Boolean crap;
public Boolean getCrap() {
return crap;
}
public void setCrap(Boolean crap) {
System.out.println("lol.. this is crap!!");
this.crap = crap;
}
}
构建此项目并导出为 jar 文件,例如 crap.jar。
现在再创建一个名为“Junk”的 Java 项目。将 crap.jar 文件添加到该项目的类路径中,然后创建一个包含以下内容的 .java 文件:
public class Junk {
public static void main(String[] args) {
Crap crap = new Crap();
crap.setCrap(true);
}
}
现在,构建 Junk 项目,并将 Junk.java 作为 Java 应用程序运行。它将成功运行,输出将是
大声笑..这是废话!
现在,修改 Crap.java,将 Boolean crap 修改为 boolean 以及相应的 getter 和 setter。代码如下所示:
public class Crap {
private boolean crap;
public boolean getCrap() {
return crap;
}
public void setCrap(boolean crap) {
System.out.println("lol.. this is crap!!");
this.crap = crap;
}
}
再次构建这个项目并将其导出为 crap.jar。将此 crap.jar 文件放入 Junk 项目的类路径中(并从其类路径中删除较早的 jar 文件)。
现在,如果您尝试将 Junk.java 作为 java 应用程序运行,您将得到以下堆栈跟踪:
Exception in thread "main" java.lang.NoSuchMethodError: crap.Crap.setCrap(Ljava/lang/Boolean;) at junk.Junk.main(Junk.java:9)