当前位置: 首页 > 知识库问答 >
问题:

当方法有返回值时,invokestatic是否将返回值放在堆栈上?

丰俊艾
2023-03-14
Operand Stack
    ..., objectref, [arg1, [arg2 ...]] →

    ...
    public static void main(String[] args){
        System.out.println("Hello JVM!");
        Integer integer = 1;
    } 
  public static void main(java.lang.String[]);
    descriptor: ([Ljava/lang/String;)V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=2, args_size=1
         0: getstatic     #2                  // Field java/lang/System.out:Ljava/io/PrintStream;
         3: ldc           #3                  // String Hello JVM!
         5: invokevirtual #4                  // Method java/io/PrintStream.println:(Ljava/lang/String;)V
         8: iconst_1
         9: invokestatic  #5                  // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
        12: astore_1
        13: return
      LineNumberTable:
        line 6: 0
        line 7: 8
        line 8: 13

12:astore_1

当方法有返回值时,invokestatic是否将返回值放在堆栈上?

共有1个答案

邹德泽
2023-03-14

嗯,技术上不是,但实际上是的。

InvokeStatic仅在调用的方法是native(在本例中,这意味着非Java代码)时才在操作数堆栈上推送返回值。

对于非本机方法(即所有用Java编写的“正常”方法),该工作由*return操作码完成,这将是执行的最后一条指令(假设方法正常终止)。例如areturn:

 类似资料:
  • 问题内容: 我有一个PDO功能: 当我执行选择查询以返回一行(或更多)时,它将返回例如: 当查询失败时(例如,如果我使用错误的语法),它将返回FALSE。 但是,如果在查询中未找到任何行,则它还会返回FALSE。 因此,查询中有错误且没有行的返回值都将返回FALSE。那怎么可能?仅当查询中有错误时,我才需要返回FALSE,例如,当没有结果时,我就需要返回NULL。我的功能有问题吗? 谢谢! 问题答

  • 在Spring MVC框架中,当控制器返回接口类型时,Spring的消息转换器可以将返回值转换为适当的消息(如JSON)。 例如,当我调用“vehicle”api时,我可以得到一条JSON消息。 但是,网络流量的行为不同。当返回类型是一个单一的界面时,它只支持“内容类型:文本/事件流”。 在我看来,Webflux的行为令人不安。是虫子吗?我需要添加自定义MessageWriter来编码接口类型吗?

  • 本文向大家介绍什么是方法的返回值?返回值在类的方法里的作用是什么?相关面试题,主要包含被问及什么是方法的返回值?返回值在类的方法里的作用是什么?时的应答技巧和注意事项,需要的朋友参考一下 方法的返回值是指我们获取到的某个方法体中的代码执行后产生的结果!(前提是该方法可能产生结果)。 返回值的作用: 接收出结果,使得它可以用于其他的操作!

  • 根据函数或者结构体方法的返回值,returnHandle 插件将自动将内容写入到 ResponseWriter. 目前支持的返回值及对应的行为如下: string 返回string,将会把string转为[]byte同时写入到ResponseWriter []byte 返回[]byte将会直接写入ResponseWriter error 返回错误,如果error不为nil, 则写入返回头500,内

  • 问题内容: 我有一个javascript函数,该函数调用通用函数对服务器进行ajax调用。我需要从ajax调用的回调函数中检索结果(true / false),但是我得到的结果始终是’undefined’。 如果没有我的全部逻辑,泛型函数的超级简化版本将是: 调用它的函数将类似于: “结果”变量始终为“未定义”,并且对其进行调试,我可以看到正在执行回调函数的“返回真”行。 为什么会这样?如何将返回

  • 问题内容: 我在使用Ajax时遇到问题。 问题是,在获得ajax响应之前,它会返回cnt。因此它总是返回NULL。 有没有办法使正确的返回响应值? 谢谢! 问题答案: 由于AJAX请求是异步的,因此您的cnt变量将在请求返回并调用成功处理程序之前返回。 我建议重构您的代码以解决此问题。 一种方法是从AJAX请求的成功处理程序中调用调用了GetGrantAmazonItemCnt()的任何函数,此方