这段代码:
Integer ints[] = new Integer[]{'1', '2', '3'};
Run Code Online (Sandbox Code Playgroud)
在eclipse中编译得很好,但是javac(版本1.6.0_27和1.7.0)都会出现以下错误:
BoxTest.java:4: incompatible types
found : char
required: java.lang.Integer
Integer ints[] = new Integer[]{'1', '2', '3'};
BoxTest.java:4: incompatible types
Run Code Online (Sandbox Code Playgroud)
为什么?
我认为它是某种编译器标志,但是通过eclipse来挖掘它并不完全是直截了当的.
什么javac不做,不是自动装箱,而是自动演员.在javac其中汇编:
Integer ints[] = new Integer[] { (int) '1', (int) '2', (int) '3' };
Run Code Online (Sandbox Code Playgroud)
只有一个发生同样的事情Integer,再一次javac,我要进行显式转换来编译:
Integer a = (int) '1';
Run Code Online (Sandbox Code Playgroud)
但这是我发现的.即使没有强制转换,从命令行使用Eclipse JDT批处理编译器也可以工作:
$ java -jar org.eclipse.jdt.core_3.7.1.v_B76_R37x.jar -classpath rt.jar \
-1.6 Appo.java
Run Code Online (Sandbox Code Playgroud)
我已经看过了选项,javac我认为没有办法改变这种行为.
我要推断,差异是由于Eclipse不是在javac内部使用,而是由JDT编译器引起的.
| 归档时间: |
|
| 查看次数: |
701 次 |
| 最近记录: |