小编sho*_*uit的帖子

如何理解是否已创建新的String对象

我对编译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)

java oop string

6
推荐指数
1
解决办法
129
查看次数

我怎样才能在c中创建一个n维数组

我正在考虑编写一个带有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维数组的嵌套循环参数?有没有办法优化代码?

c arrays malloc pointers

5
推荐指数
1
解决办法
2994
查看次数

标签 统计

arrays ×1

c ×1

java ×1

malloc ×1

oop ×1

pointers ×1

string ×1