在cmd中编译但在Netbeans中编译时出错

时间:2016-02-05 08:59:13

标签: java netbeans

我有一个小的java文件,如下所示。

    class abc{
    public static void main(String args[]){
        Object a= 9;
        int b= (int)a;
        System.out.print(b);
    }
}

在cmd中编译时出错,但在Netbeans中没有。此外,当我更换'(int)a'使用'(整数)a',它可以在cmd和Netbeans上编译并运行良好。

    class abc{
    public static void main(String args[]){
        Object a= 9;
        int b= (Integer)a;
        System.out.print(b);
    }
}

这是什么原因以及如何解决这个问题?

编辑:编译第一个代码时出现的错误是:

    C:\Users\ANKIT.ANKITSHUBHAM-PC>javac abc.java
    abc.java:4: inconvertible types
    found   : java.lang.Object
    required: int
                            int b= (int)a;
                                        ^
    1 error

编辑:这个问题不是关于施法。这就是为什么当我使用'(int)'将对象转换为int时,cmd和Netbeans的行为会有所不同。但是在使用'(整数)'。

进行投射时表现相同

5 个答案:

答案 0 :(得分:9)

这里会发生什么:

Object a= 9;

是:

    创建值为int
  • 9
  • 使用自动装箱
  • 将其包裹在Integer
  • 它存储在Object
  • 类型的变量中

现在,在下一行,Object无法转换为Java 6中的int ,因为它实际上是Integer,而不是原始类型。然而,它可以转换为Integer,然后自动拆箱负责从int中提取Integer

现在到了#34;为什么它在Netbeans中工作呢?"

Netbeans使用与命令行javac不同的编译器(请参阅here)。它的行为可能与javac不同,并且更宽容 - 当遇到尝试将其强制转换为Integer时,它可能会自动取消装箱int

根据另一个答案,Java 7在这种情况下支持自动拆箱,因此可能的原因是您的命令行javac来自Java 6,而您的Netbeans使用Java 7编译器(或更高版本)。

答案 1 :(得分:5)

我说它是由于不同的编译器版本(或源合规级别):

$ javac abc.java -source 1.6
warning: [options] bootstrap class path not set in conjunction with -source 1.6
abc.java:4: error: incompatible types: Object cannot be converted to int
        int b= (int)a;
                    ^
1 error
1 warning
$ javac abc.java -source 1.8
$ java abc
9

这似乎是在Java 7中所做的更改。请参阅this question及相关答案。

看看其他一些答案,我认为指出你的代码是完全有效的Java 7代码是很重要的。

您不需要NetBeans编译器,我只是说从Oracle网站安装Java 8并且您已经完成了。您只需要担心代码是否需要在Java 6上运行,在这种情况下,您的代码需要向后兼容。

答案 2 :(得分:2)

您无法将Object转换为基本类型的数据,也许NetBeans会为您执行一个框。您在两种环境中使用什么Java版本进行编译?

答案 3 :(得分:2)

这种漠不关心的行为的原因是Netbeans使用的是Java 7,但是cmd仍在使用Java 6.使用'(int)' Java 6中不允许使用Java 7。

如何从cmd使用Java 7? 答:

  1. 打开'我的电脑'
  2. 点击“系统属性”'选项卡在顶部。
  3. 点击“高级系统设置”'在左侧窗格中。
  4. 点击环境变量......'按钮。
  5. 将有两个部分;我们对那些带有标题'系统变量'

  6. 的人感到困扰
  7. 选择'路径'然后单击“编辑”按钮。

  8. 添加java 7的javac的地址。在我的例子中,它是" C:\ Program Files \ Java \ jdk1.7.0_79 \ bin"。它包含javac.exe
  9. 单击“确定”。

    现在尝试从cmd运行。希望它有效!

答案 4 :(得分:0)

那是因为你无法将Object转换为基本类型的数据。在第二个代码示例中,您实际上是将Object转换为Integer,然后将其解包为原始int