gpt4 book ai didi

java - java 如何允许添加 Integer 和 Double 实例?

转载 作者:搜寻专家 更新时间:2023-11-01 01:12:09 25 4
gpt4 key购买 nike

当我执行以下代码时,第 3 行内部发生了什么

Integer i=1; 
Double d1=1.1;
Double d2= i+d1;

最佳答案

您可以阅读语言规范中“内部”工作的定义:

但是这些可能有点干。

尝试反编译以下代码:

void add(Integer i, Double d1) {
Double d2= i+d1;
}

编译为:

  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

逐行分解(无论如何对于重要的行):

  • 1:这是将 iInteger 拆箱到 int
  • 4:这是将 iint 值扩大到 double
  • 6:这是将 d1Double 拆箱到 double
  • 9:这是添加未装箱(和加宽)的值。
  • 10:这是将 double 的结果装箱到 Double

您可以将其视为等同于:

void add2(Integer i, Double d1) {
Double d2= Double.valueOf((double) i.intValue() + d1.doubleValue());
}

因为两者有相同的字节码。

关于java - java 如何允许添加 Integer 和 Double 实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45133290/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com