我已经注意到在Java SE 6和Java SE 7之间的自动拆箱行为有所不同。我想知道为什么,因为在这两个版本之间我找不到任何有关此行为更改的文档。 这是一个简单的例子: Object[] objs = new Object[2]; objs[0] = new Integer(5); int myInt = (int)objs[0]; 这个编译良好的javac从Java SE 7.但是,如果我给编译器“-source 1.6”参数,我在最后一行得到一个错误: inconvertible types found : java.lang.Object required: int 我尝试下载Java SE 6以使用本机版本6编译器进行编译(不带任何-source选项)。 它同意并给出与上述相同的错误。 那么给了什么? 从一些更多的实验看来,Java 6中的拆箱似乎只能清除(在编译时)是盒装types的值。 例如,这两个版本的作品: Integer[] objs = new Integer[2]; objs[0] = new Integer(5); int myInt = (int)objs[0]; 所以看起来,在Java 6和7之间,拆箱function得到了增强,因此它可以一次性投射和取消投放对象types,而不知道(在编译时)该值是否是适当的盒装types。 但是,阅读Java语言规范或Java 7发布时撰写的博客post,我看不出有什么变化,所以我想知道这个变化是什么,这个“特性”叫做什么? […]
这个问题是关于“为什么自动装箱在Java中使某些调用模糊不清?” 但通读答案,有一些参考铸造,我不知道我完全理解的差异。 有人可以提供一个简单的解释?