Java 无法理解错误

Java 无法理解错误,java,Java,请尝试改用以下代码: public class Print3 { public static Integer wiggler(Integer x) { Integer y = x+10; x++; System.out.println(x); return y; } public static void main(String[] args) { Integer dataWrapper =

请尝试改用以下代码:

public class Print3 {
    public static Integer wiggler(Integer x) {
        Integer y = x+10;
        x++;
        System.out.println(x);

        return y;
    }

    public static void main(String[] args) {
        Integer dataWrapper = new Integer(5);
        Integer value = wiggler(dataWrapper);
        System.out.println(dataWrapper+value);
    }
} 

正如@Eran所提到的,我希望您的代码能够正常工作。显然,您的Java版本由于添加了两个
Integer
s而受阻。

我以前没有见过这个编译错误,这对我来说非常奇怪,因为通常Java编译器会将Integer对象取消装箱为int-primitve类型并使用加法

我已经编译了您的文件并查看了二进制代码:

public class Print3 {
    public static Integer wiggler(Integer x) {
        Integer y = new Integer(x.intValue() + 10);
        x = new Integer(x.intValue() + 1);
        System.out.println(x);

        return y;
    }

    public static void main(String[] args) {
        Integer dataWrapper = new Integer(5);
        Integer value = wiggler(dataWrapper);
        int result = dataWrapper.intValue() + value.intValue();
        System.out.println(result);
    }
}
publicstaticvoidmain(java.lang.String[]);
描述符:([Ljava/lang/String;)V
标志:ACC_公共,ACC_静态
代码:
堆栈=3,局部变量=3,参数大小=1
0:new#6//class java/lang/Integer
3:dup
4:iconst_5
5:invokespecial#7//方法java/lang/Integer.“:(I)V
8:astore_1
9:aload_1
10:invokestatic#8//方法wiggler:(Ljava/lang/Integer;)Ljava/lang/Integer;
13:astore_2
14:getstatic#4//Field java/lang/System.out:Ljava/io/PrintStream;
17:aload_1
18:invokevirtual#2//方法java/lang/Integer.intValue:()I
21:aload_2
22:invokevirtual#2//方法java/lang/Integer.intValue:()I
25:iadd
26:invokevirtual#9//方法java/io/PrintStream.println:(I)V
29:返回
LineNumberTable:
第11行:0
第12行:9
第13行:14
第14行:29
}
我省略了无趣的二进制代码,因为有趣的部分在main方法中。 我想向您展示的是,Java编译器将使用调用方法Java/lang/Integer.intValue:()i自动将包装类取消装箱为int基元类型 在第18行和第22行中,之后将执行添加

因此,其他答案也无济于事

我建议使用另一个Java编译器分别更新您的jdk 并尝试在另一台机器上编译它

您还可以使用ideone测试代码,正如您所看到的那样,它工作得非常完美


public类Print3{public static Integer wiggler(Integer x){Integer y=x+10;x++;System.out.println(x);return y;}public static void main(String[]args){Integer dataWrapper=new Integer(5);Integer value=wiggler(dataWrapper);System.out.println(数据包装器+值);}请不要将您的源代码添加为评论,编辑您的问题。请编辑您的问题以添加源代码和明确的问题。您希望得到什么?您的代码对我来说很好。您理解吗?非常感谢Tim,我是新来的,如果我需要时间来理解给出/陈述的规则和解释,请耐心等待。
public class Print3 {
    public static Integer wiggler(Integer x) {
        Integer y = new Integer(x.intValue() + 10);
        x = new Integer(x.intValue() + 1);
        System.out.println(x);

        return y;
    }

    public static void main(String[] args) {
        Integer dataWrapper = new Integer(5);
        Integer value = wiggler(dataWrapper);
        int result = dataWrapper.intValue() + value.intValue();
        System.out.println(result);
    }
}
  public static void main(java.lang.String[]);
    descriptor: ([Ljava/lang/String;)V
    flags: ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=3, args_size=1
         0: new           #6                  // class java/lang/Integer
         3: dup
         4: iconst_5
         5: invokespecial #7                  // Method java/lang/Integer."<init>":(I)V
         8: astore_1
         9: aload_1
        10: invokestatic  #8                  // Method wiggler:(Ljava/lang/Integer;)Ljava/lang/Integer;
        13: astore_2
        14: getstatic     #4                  // Field java/lang/System.out:Ljava/io/PrintStream;
        17: aload_1
        18: invokevirtual #2                  // Method java/lang/Integer.intValue:()I
        21: aload_2
        22: invokevirtual #2                  // Method java/lang/Integer.intValue:()I
        25: iadd
        26: invokevirtual #9                  // Method java/io/PrintStream.println:(I)V
        29: return
      LineNumberTable:
        line 11: 0
        line 12: 9
        line 13: 14
        line 14: 29
}