【问题标题】:String equality in asm bytecodeasm字节码中的字符串相等
【发布时间】:2013-06-12 14:52:14
【问题描述】:

我正在尝试在字节码中执行此操作:

if("asd"=="asd"){}

但我收到以下错误:

Exception in thread "main" java.lang.VerifyError: (class: Main, method: main signature: ([LJava/lang/String:)V) Expecting to find integer on stack
    at java.lang.Class.getDeclareMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
    at java.lang.class.getMethod0(Unknown Source)
    at java.lang.class.getMethod(Unknown Source)
    at sun.launcher.LauncherHelper.getMainMethod(Unknown Source)
    at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)

有什么想法吗?

【问题讨论】:

    标签: java assembly compiler-construction jvm bytecode


    【解决方案1】:

    IF_ICMPEQ 是整数比较(这就是 ICMP 的意思)你想用 IF_ACMPEQ 比较引用

    顺便说一句,您不需要存储然后加载值,您可以使用堆栈上的值。

    【讨论】:

    • 我建议你看看 ASM 字节码插件。您可以编写 Java 代码,它会显示字节码和 ASM 代码以在另一个窗口中生成它。
    • 另外,Tony,您在过去一周发布了几个问题,但您没有接受其中任何一个的答案。这被认为是糟糕的 StackOverflow 礼仪;如果有人花时间回答您的问题,并且您对答案感到满意,您应该对其进行投票并将其标记为已接受。当您这样做时,我们会获得声望点数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-28
    • 1970-01-01
    • 1970-01-01
    • 2016-02-02
    相关资源
    最近更新 更多