自动装箱无法将int转换为Integer。

8

我是一个完全的新手,正在尝试学习Java。我在这里阅读了有关自动装箱拆箱概念的内容(链接)

我正在使用Java版本1.8.0_05和Eclipse。

代码如下:

class Test {
    public static void main(String[] args) {
        Integer iob = 100; // shows error -> Type mismatch: Cannot convert from int to Integer
    }
}

感谢您的帮助。

无法重现(http://ideone.com/dGBgIX)。我不确定你遇到了什么问题。在我的电脑上,代码看起来完全正常。第一个猜测是可能存在某种设置不匹配的问题... - awksp
Eclipse 给我显示错误。并且在强制编译后,它抛出一个异常:Exception in thread "main" java.lang.Error: Unresolved compilation problem: Type mismatch: cannot convert from int to Integer at com.start.variables.Boxing.main(Boxing.java:6) - Dangling Cruze
4
你的Integer是指Java中的java.lang.Integer类吗? - MGorgon
是的,我还没有包含任何其他的包。这只是一个仅加载了java.lang的简单程序。 - Dangling Cruze
3个回答

21

要使用自动装箱/拆箱功能,您需要将语言级别设置至少为1.5/5.0。

项目 --> 属性 --> Java编译器中更改您的设置。很可能您没有设置正确的级别。

请注意,这并不直接与您使用的JDK版本相关,它只是意味着您的Java代码将被解释为不高于语言级别版本的级别,使用任何至少等于或高于给定语言级别设置的JDK版本。

例如:如果您使用JDK 1.8+,将语言级别设置为5.0表示您只能使用最高到JDK 1.5的Java功能。


1

听起来你在Eclipse中设置了错误的语言级别。

请参见@Override gives error in eclipse?

要更改语言级别,请转到 项目 > 属性 > Java编译器 并在那里设置语言级别。您可能需要点击启用项目特定的设置。


我看到我的项目正在运行在包含我上面提到的Java版本的CDC上。 - Dangling Cruze
在项目 > 属性 > Java Build Path 中,所有包含的库都是 1.8.0_05 版本。 - Dangling Cruze
1
图书馆不是问题。Javac有源/目标兼容性参数,因此即使您使用的是1.8 JDK版本,Eclipse或构建工具仍可以配置为将源代码解释为任何早期版本。 - Chris Martin

0

Java 1.5 版本推出了自动装箱功能。

请确保至少运行 Java 1.5 版本。

否则,您需要使用 new Integer(100) 或者 Integer.valueOf(100)。或者直接将其声明为 int 而不是 Integer。

您可以检查 PATHJAVA_HOME,具体方法如下:

Object obj = System.getenv();
System.out.println(obj);

你应该得到如下输出:

{JAVA_MAIN_CLASS_5612=org.eclipse.jdt.internal.junit.runner.RemoteTestRunner, SHELL=/bin/bash, TMPDIR=/var/folders/zw/n554nzl151sgtr5rqftblcjm0000gn/T/, com.apple.java.jvmMode=client, __CF_USER_TEXT_ENCODING=0x1F5:0:0, APP_ICON_5439=../Resources/sts.icns, PATH=/usr/bin:/bin:/usr/sbin:/sbin:/Users/fede/jdk1.8/bin, JAVA_HOME=/Users/fede/jdk1.8/, USER=fede, com.apple.java.jvmTask=CommandLine_Manual.java, HOME=/Users/fede, LOGNAME=fede, Apple_PubSub_Socket_Render=/tmp/launch-5UzUjs/Render, SSH_AUTH_SOCK=/tmp/launch-2okgJL/Listeners, __CHECKFIX1436934=1, JAVA_STARTED_ON_FIRST_THREAD_5439=1}

这可以帮助找出正在发生的事情。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接