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
}