当我执行以下代码时,第3行内部发生了什么
Integer i=1;
Double d1=1.1;
Double d2= i+d1;
Run Code Online (Sandbox Code Playgroud)
And*_*ner 10
您可以在语言规范中阅读"内部"工作的定义:
但这些可能有点干.
尝试反编译以下代码:
void add(Integer i, Double d1) {
Double d2= i+d1;
}
Run Code Online (Sandbox Code Playgroud)
这被编译为:
void add(java.lang.Integer, java.lang.Double);
Code:
0: aload_1
1: invokevirtual #6 // Method java/lang/Integer.intValue:()I
4: i2d
5: aload_2
6: invokevirtual #7 // Method java/lang/Double.doubleValue:()D
9: dadd
10: invokestatic #5 // Method java/lang/Double.valueOf:(D)Ljava/lang/Double;
13: astore_3
14: return
Run Code Online (Sandbox Code Playgroud)
逐行分解(对于重要的线路,无论如何):
i从Integer至intint的值i,以doubled1从Double至doubledouble来Double.你可以看到这相当于:
void add2(Integer i, Double d1) {
Double d2= Double.valueOf((double) i.intValue() + d1.doubleValue());
}
Run Code Online (Sandbox Code Playgroud)
因为这两个字节码相同.