无法理解错误

时间:2015-05-20 08:29:02

标签: java

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    The operator + is undefined for the argument type(s) java.lang.Integer,
    java.lang.Integer

    at TestClass.Print3.main(Print3.java:14)
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);
    }
} 

2 个答案:

答案 0 :(得分:1)

之前我还没有看到这个编译错误,它对我来说很奇怪,因为通常Java编译器会将Integer对象解包为int primitve类型并使用添加。

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

  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
}

我省略了不感兴趣的二进制代码,因为有趣的部分在主方法中。 我想告诉你的是,Java编译器将自动将Wrapper类拆分为int基本类型,调用方法java / lang / Integer.intValue :()I 在第18行和第22行之后,将执行添加。

所以其他答案也没有帮助。

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

您还可以使用ideone测试代码,并且看起来效果非常好。

http://ideone.com/9tJYf1

答案 1 :(得分:0)

请尝试使用此代码:

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);
    }
}

正如@Eran所提到的,我本来希望你的代码可以正常工作。显然你的Java版本因添加两个Integer而感到窒息。