我对编译3行程序的答案和结果感到困惑.下面是代码及其操作码:http://pastebin.com/B1xxAjcp如果我不是完全错误的话,很明显
String s="abcd";
String s1=new String("efgh");
s.concat("ijkl");
Run Code Online (Sandbox Code Playgroud)
这些行对应于这些操作码:
1: istore_1
2: ldc #2 // String abcd
4: astore_2
5: new #3 // class java/lang/String
8: dup
9: ldc #4 // String efgh
11: invokespecial #5 // Method java/lang/String."<init>
":(Ljava/lang/String;)V
14: astore_3
15: aload_2
16: ldc #6 // String ijkl
18: invokevirtual #7 // Method java/lang/String.concat:
(Ljava/lang/String;)Ljava/lang/String;
Run Code Online (Sandbox Code Playgroud)
因此,根据我的理解ldc #index,不是创建新对象,而是创建对常量文字池的引用,并将其推送到堆栈.
创建一个新对象,new并在dup命令之前发生命令ldc #index.但在这个问题中有多少String对象..?,第二个答案说ldc #index暗示已经创建了String对象,解释如下:
public static void …Run Code Online (Sandbox Code Playgroud) 我正在考虑编写一个带有n个参数的函数,并使用这些参数作为维度返回一个n维数组.现在我意识到使用指针很容易实现一维和二维数组.对于2d数组,代码片段就像(标准方式):
int** x;
int* temp;
x = (int**)malloc(m * sizeof(int*));
temp = (int*)malloc(m*n * sizeof(int));
for (int i = 0; i < m; i++) {
x[i] = temp + (i * n);
}
Run Code Online (Sandbox Code Playgroud)
数组的大小为m*n; 但问题在于我们如何找到n维数组的嵌套循环参数?有没有办法优化代码?