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

Ank*_*ham 9 java netbeans

我有一个小java文件给出如下.

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

它在cmd中编译时出错,但在Netbeans中没有.此外,当我用'(整数)a'替换'(int)a'时,它在cmd和Netbeans上编译并运行正常.

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

这是什么原因,我该如何解决这个问题?

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

    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
Run Code Online (Sandbox Code Playgroud)

编辑:这个问题不是关于铸造.这是为什么当我使用'(int)'将对象转换为int时cmd和Netbeans的行为不同,但在使用'(Integer)'进行转换时表现相同.

Jir*_*sek 9

这里发生了什么:

Object a= 9;
Run Code Online (Sandbox Code Playgroud)

是:

  • int9已创建值
  • 它包含在Integer使用自动装箱中
  • 它存储在一个类型的变量中 Object

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


现在到"为什么它在Netbeans中工作呢?"

Netbeans使用与命令行不同的编译器(参见此处)javac.它可能以不同的方式表现javac并且更宽容 - 也许它Integer在遇到尝试将其强制转换时自动取消装箱int.

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


Vla*_*lad 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
Run Code Online (Sandbox Code Playgroud)

看起来这是在Java 7中所做的更改.请参阅此问题和相关答案.

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

您不需要NetBeans编译器,我只是说从Oracle网站安装Java 8就可以了.您只需要担心代码是否需要在Java 6上运行,在这种情况下,您的代码需要向后兼容.


Ank*_*ham 2

这种冷漠行为的原因是 Netbeans 使用的是 Java 7,但 cmd 仍在使用 Java 6。Java 6 中不允许使用“(int)”进行转换,但 Java 7 中允许。

如何从cmd使用Java 7?回答:

  1. 打开“我的电脑”

  2. 单击顶部的“系统属性”选项卡。

  3. 单击左侧窗格中的“高级系统设置”。

  4. 单击“环境变量...”按钮。

  5. 将分为两个部分;我们对标题为“系统变量”的内容感到困扰

  6. 选择“路径”并单击“编辑”按钮。

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

  8. 单击“确定”。

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