我正在为SCJP考试学习,但遇到了一个问题,我无法真正解决。
这本书说你不能先扩大再装箱,但是你可以先扩大再装箱。
无法装箱的示例是期望Long的方法和使用字节调用的方法。
他们的解释是:
但这听起来像框,然后扩大,而不是扩大,然后对我框。
任何人都可以为我弄清楚整个方框,然后再扩大还是扩大,因为就目前的情况而言,这本书在这个问题上还不是很清楚。
编辑:
澄清一下:我在说的是SCJP sun认证的Java 6程序员的252和253页。
http://books.google.be/books?id=Eh5NcvegzMkC&pg=PA252#v=onepage&q&f=false
最佳答案
语言令人困惑。
基本上,您不能采用这种方式:
字节->字节->长
因为Byte和Long不共享is-a关系。
因此,它尝试执行以下操作:
字节->长->长
但是它也不能做到这一点(显然是由于编译器的限制)。因此,它失败并引发错误。
但是,另一方面,您可以执行以下操作:
字节->字节->对象
因为字节是一个对象。
考虑2个函数和一个字节变量:
到长(长x)
toObject(Object x)
字节b = 5;
那么此声明将是非法的:
toLong(b);//因为b-> new Byte(b)-> new Long(new Byte(b))是非法的。
AND字节-> long->由于编译器的限制,Long无法完成。
但此声明是合法的:
toObject(b);//因为b-> new Byte(b)-> new Object(new Byte(b))是合法的。