我从JVM获取arr int []并希望在指定的索引处设置一个值, 像这样:
jintArray arr;
jint* ints = _env->GetIntArrayElements(arr, false);
int newvalue = 4;
_env->SetIntArrayRegion(ints, 3, 1, &newvalue); // this works
inst[3] = newvalue; // this failed !!!
你能告诉我为什么第二次任务失败??? 它应该工作并且更快(没有方法调用)。
谢谢, LUC
答案 0 :(得分:0)
卢克提到,他正在谈论JNI。一般的答案是JVM的GC可能会在后备存储中移动到阵列。 jintArray类型只是一个typedef,它实际上只表示数组的句柄。
如果您正在操作数组,则必须使用SetIntArrayRegion
,它将传递的指针复制到后备存储中,
或者你可以使用GetIntArrayElements
的组合,它会固定或复制数组,然后是ReleaseIntArrayElements
。
由于jintArray不是正确的C数组,因此不能使用索引器运算符[]。
答案 1 :(得分:-1)
JIntArray本身不是原始数组,它只包含一个原始数组。要设置值,可以使用set(int index,int value)方法(有关详细信息,请参阅API),或者可以使用JIntArray toArray()方法获取数组,并使用该数组。 / p>
在您的上下文中,第一种方法如下所示:
arr.set(3, newvalue);