Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
字符串数组上的Java字节码[putstatic中的类型错误]_Java_Bytecode_Java Bytecode Asm_Jasmin - Fatal编程技术网

字符串数组上的Java字节码[putstatic中的类型错误]

字符串数组上的Java字节码[putstatic中的类型错误],java,bytecode,java-bytecode-asm,jasmin,Java,Bytecode,Java Bytecode Asm,Jasmin,我尝试为类编写JVM字节码,等效于以下内容: public class foo { static String[] crr; public static void printString(String str) { System.out.println(str); } public static void main(String[] args) { crr = new String[10]; crr[0] = "Hello"; fo

我尝试为类编写JVM字节码,等效于以下内容:

public class foo {
    static String[] crr;
    public static void printString(String str) {
    System.out.println(str);
    }
    public static void main(String[] args) {
    crr = new String[10];
    crr[0] = "Hello";
    foo.printString(crr[0]);
    }
}
我写的字节码:

.class public foo
.super java/lang/Object
.field public static crr [Ljava/lang/String;
.method public <init>()V
    aload_0
    invokenonvirtual java/lang/Object/<init>()V
    return
.end method
.method public static printString(Ljava/lang/String;)V
    .limit locals 1
    .limit stack 2
    getstatic java/lang/System/out Ljava/io/PrintStream;
    aload_0
    invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V
    return
.end method
.method public static main([Ljava/lang/String;)V
    .limit stack 20
    .limit locals 10
    bipush 9
    anewarray Ljava/lang/String;
    putstatic foo.crr [Ljava/lang/String;
    getstatic foo.crr [Ljava/lang/String;
    ldc 0
    ldc "Hello"
    aastore
    getstatic foo.crr [Ljava/lang/String;
    ldc 0
    aaload
    invokestatic foo.printString(Ljava/lang/String;)V
    return
.end method

有人知道问题出在哪里以及如何解决吗?

您在
anewarray
指令中有一个错误。而不是

anewarray Ljava/lang/String;
你需要写作

anewarray java/lang/String

谢谢你能进一步解释我什么时候应该使用“Ljava/lang/String;”或“java/lang/String”吗?@RuoChunZeung名称和描述符的混合很混乱,最后你需要查阅文档():anewarray指令只需要一个类名,而不是描述符。
anewarray java/lang/String