相关疑难解决方法(0)

Java 6与Java 7之间自动拆箱的差异

我注意到Java SE 6和Java SE 7之间的自动拆箱行为有所不同.我想知道为什么会这样,因为我找不到这两个版本之间这种行为的变化的任何文档.

这是一个简单的例子:

Object[] objs = new Object[2];
objs[0] = new Integer(5);
int myInt = (int)objs[0];
Run Code Online (Sandbox Code Playgroud)

这与Java SE 7中的javac编译良好.但是,如果我给编译器"-source 1.6"参数,我在最后一行得到一个错误:

inconvertible types
found   : java.lang.Object
required: int
Run Code Online (Sandbox Code Playgroud)

我尝试下载Java SE 6以使用本机版本6编译器进行编译(不带任何-source选项).它同意并给出与上面相同的错误.

什么给出了什么?从一些更多的实验看来,Java 6中的拆箱似乎只能清楚地(在编译时)是盒装类型的unbox值.例如,这适用于两个版本:

Integer[] objs = new Integer[2];
objs[0] = new Integer(5);
int myInt = (int)objs[0];
Run Code Online (Sandbox Code Playgroud)

因此,似乎在Java 6和7之间,取消装箱功能得到了增强,因此它可以一次性抛出和取消对象类型,而不知道(在编译时)该值是正确的盒装类型.但是,通过阅读Java语言规范或Java 7发布时写的博客文章,我看不出有什么变化,所以我想知道改变是什么以及这个"功能"被称为什么?

好奇心:由于变化,可能会触发"错误"的拆箱:

Object[] objs = new Float[2];
objs[0] = new Float(5);
int myInt = (int)objs[0];
Run Code Online (Sandbox Code Playgroud)

这编译得很好但在运行时给出了ClassCastException.

对此有何提及?

java unboxing casting java-7

107
推荐指数
2
解决办法
8006
查看次数

标签 统计

casting ×1

java ×1

java-7 ×1

unboxing ×1