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);
}
}
答案 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测试代码,并且看起来效果非常好。
答案 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
而感到窒息。