Java有一条dup2_x2指令,根据documentation,该指令具有以下行为:

复制操作数堆栈上最上面的一个或两个值,并按原始顺序将复制的值插入操作数堆栈.

javac是否使用此指令生成字节码?它的潜在用例是什么?

推荐答案

例如,下面的代码

public static Long example1(Long[] array, int i, long l) {
    return array[i]=l;
}
public static long example2(long[] array, int i, long l) {
    return array[i]=l;
}

编译成

  public static java.lang.Long example1(java.lang.Long[], int, long);
    Code:
       0: aload_0
       1: iload_1
       2: lload_2
       3: invokestatic  #1        // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
       6: dup_x2
       7: aastore
       8: areturn

  public static long example2(long[], int, long);
    Code:
       0: aload_0
       1: iload_1
       2: lload_2
       3: dup2_x2
       4: lastore
       5: lreturn

看,demo on Ideone

Java相关问答推荐

转换为Biggram

JUnit—如何模拟局部变量对象方法调用

在Java中,在单个逻辑行中连接列表和单个元素的正确方法是什么?

如何在Spring Java中从数据库列中获取JSON中的具体数据

如何在JavaFX中处理多个按钮

除0错误/抱歉我的句子是PT

具有多个模式的DateTimeForMatter的LocalDate.parse失败

如何在字节数组中反转UTF-8编码?

为什么项目名称出现在我的GET请求中?

JavaFX,GridPane:在GridPane的列中生成元素将保持所有列的宽度

如何在Spring Boot Auth服务器上正确配置CORS?

让标签占用JavaFX中HBox的所有可用空间

Java中的一个错误';s stdlib SocksSocketImpl?

如何在MPAndroidChart中的条形图上正确添加标签

多线程、并发和睡眠未按预期工作

javax.crypto-密码对象-提供者服务是如何工作的?

为什么我得到默认方法的值而不是被覆盖的方法的值?

Cucumber中第二个网页的类对象未初始化

JAVA 正则表达式识别字符串string或字符串内的字符char

在Java中,在Object#equals()调用期间,两个对象是否必须具有相同的hashCode?我们是否需要在 equals() 中比较 hashCode?