java - asm 字节码中的字符串相等性

标签 java assembly compiler-construction jvm bytecode

我正尝试在字节码中这样做:

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)

有什么想法吗?

最佳答案

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

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

关于java - asm 字节码中的字符串相等性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17068628/

相关文章:

双: compiler dependent?的C精度

java - RESTEasy 和 JAX-RS 的区别

java - 开始使用jogl,找不到DebugGL类

linux - 在 Mac 上运行 Linux 系统调用?

c++程序无法编译

c++ - 将 Nginx 构建到库中

java - 直接关闭 TCP 连接是否正确 - 不关闭更高级别的层?

java - Java 中的 HttpPost 参数 BasicNameValuePair

c - GDB 调用不在 main 中的函数

assembly - 为什么为 "inc qword [rsp]"生成此机器代码?