Java 内部编译器错误ArrayIndexOutOfBoundsException:-1。。。generateUnboxingConversion

Java 内部编译器错误ArrayIndexOutOfBoundsException:-1。。。generateUnboxingConversion,java,boxing,autoboxing,unboxing,Java,Boxing,Autoboxing,Unboxing,我在编译时遇到了一些奇怪的异常: Byte b = 2; if (b < new Integer(5)) { ... } 字节b=2; if(b

我在编译时遇到了一些奇怪的异常:

  Byte b = 2;
  if (b < new Integer(5)) {
     ...
  }
字节b=2;
if(b<新整数(5)){
...
}
这是一个有效的检查(取消装箱隐式强制转换-取消装箱)?

公共类测试
{
公共静态void main(字符串[]args)
{
字节b=2;
if(b<新整数(5))
{
System.out.println(“工作”);
}
}
}

对我有用。(Java 1.6.0_17)。

如果出现内部编译器错误(ICE),这是Java编译器本身的一个错误,不一定是代码有任何错误


您的代码片段在最近的OpenJDK上编译得很好。您使用的是什么Java编译器?

我使用的编译器版本是:1.6.0\u 16-b01 for 6.0兼容
如果切换到兼容5.0的代码,问题似乎消失了。

如果编译器中存在错误,请执行以下操作:

  • 确保您使用的是最新版本 编译器的版本
  • 如果供应商有一个公共bug数据库,请检查(提示:使用实际文本副本并从异常跟踪粘贴)
  • 如果这是一个已知的bug,那么投票表决,提出升级,不管怎样
  • 如果找不到bug的副本,请提交一份带有简明、可编译(或不可编译)测试用例的bug报告

一般来说,在问答网站上发布软件产品中的随机错误是没有用的。

我也有这个错误,但javac没有一个(1.6和1.8)是错误的。有两个以上的libs(*.jar文件),这是重复libs的不同版本。删除重复项解决了comlie错误

您使用的java版本是什么?我刚刚在1.6.0_17上测试了这个程序,它运行正常。你能编译Stafan Kendall完整、简洁的示例程序吗?从Stefan的回答来看,它似乎已经在更新的版本中得到了修复(假设你们都在使用“正常”的Sun javac)。如果您没有使用Sun的javac,那么我肯定会按照Tom Hawtin的建议让供应商注意到bug。因此,这是您引用的代码之外的问题。你能构造一个失败的简单例子吗?我发现了这个问题。如果删除了行“System.out.println(“Working.”);”,并且If为空,则抛出该异常。这会引发相同的异常:“inta=4;如果(b>2&&bpublic class test { public static void main( String[] args ) { Byte b = 2; if( b < new Integer(5) ) { System.out.println( "Working." ); } } }